クエリの作成

必要な機能をクエリとして作成しよう。

クエリは、機能単位で作ることになるだろう。データベースの使用目的のところで考えた機能毎に、どのようなクエリで実行すればよいかを考えよう。

検索についてのクエリはすでにいろいろ学習したが、データを入力したり、変更する機能についてもクエリを作成する必要がある。

たとえば、CDデータベースの例で、データを入力する場合に、テーブルに直接データを入力するようにすると、多くの番号を入力しなければならないのでわかりにくい。クエリを作成しておくと、クエリの結果に対してデータを入力することができる。

また、SQLではクエリ以外に、データの内容に変更を加える以下のようなSQL文も使うことができる。

UPDATE テーブル set フィールド=式 WHERE 条件 ...;

これについては、これまでの授業では説明していなかった。しかし、データを更新する機能が備わっている以外はSELECTとほぼ同じなので、SELECT文が理解できていれば簡単に使用することができる。

UPDATE テーブル set フィールド=式 where ....

はフィールドを抽出する時点までは、

select フィールド from テーブル where....

と 全く同じ機能を持っている。whereより後ろはselect文とまったく同じように作ればよい。

しかし、このようなupdate文を使うと、レコードを選択した後で、「式」によって得られた値を選択されたフィールドに上書きする。このフィールドに新しい値をセットするという点だけが異なっている。

たとえば、以前紹介した「単語練習帳」の例ではこの方法を使って、単語テストの回数をカウントアップしていた。単語帳では以下のようなテーブルで、英単語の問題、回答、回答の回数、正解した回数を記録していた。

問題 回答 回数 正解
red あか 3 3
color いろ 12 11
book ほん 10 8

この時、redという単語問題を一回回答した後、redの回数を1カウントアップする、という機能は以下のようなupdate文で実現できる。

update テーブル set 回数=回数+1 where 問題="red";

このクエリを実行すると、まずset 回数 以下はselect 回数以下と同じで、"red"という単語問題のレコードの「回数」というフィールドの値+1を計算する。

そしてその値を同じレコードの回数の欄に上書きする。redのレコードの回数は3であったがそこに3+1が上書きされるので、redの回数はこのupdate文の後4に変わる。

式の部分やwhere以後の部分は、通常のselect文と同じように,AVG, COUNTなどの集合関数を使用することができる。またAccessではべき乗や多くの数学関数などもかなり自由に利用することができる。

where以下の条件で複数のレコードが選択された場合、条件に合うすべてのレコードが処理されることに注意してほしい。

その時も、上書きされるのは、同じレコードに対応する値である。たとえば、

update テーブル set 回数=回数+1;

というupdate 文を実行すると、すべての単語について回数が1増加する。

updateを使う場合には、場合によってはすべてのレコードの値を上書きしてしまうこともあるので、テスト用のテーブルで十分動作を確認してから本番のデータを操作するようにしよう。