データベース千夜一夜第4回

条件指定によるレコードの絞り込み(1)
~WHERE句と条件式の基本事項
長谷川裕行
有限会社 手國堂

レコードを絞り込む

多くの場合、全レコードの中から処理に必要な何件かのレコードに絞り込んで抽出します。そのために用いるのがWHERE句です。


- 全レコードを抽出する処理はまれ -

SELECT命令をそのまま発行すると、テーブル内のすべてのレコードが抽出されたレコードセットが生成されます。

しかし、すべての売上額を集計するような締めくくり処理や統計を取るような情報系の処理を除けば、基幹系の日常業務で全レコードを抽出しなければならないケースというのは滅多にありません。

例えば、前回から例に取り上げている商品のマスターテーブルなら、棚卸し※1などで全商品の数量と仕入額を集計する場合以外は、主に仕入れや販売処理で特定の商品1件のみに絞り込んでレコードのデータを利用することになるでしょう。

それ以外の場合でも、特定の商品の価格や仕様を変更する処理や、在庫数が一定の数量以下の商品を調べる処理など、そのとき必要な一部(あるいは1件だけ)のレコードを取り出してくることがほとんどです。

※1 在庫品の種類や数量を調べて総在庫額を集計すること。製造・販売業など在庫を保有する業種では、年に一度の棚卸しが義務付けられている


- WHERE句と条件式 -

多くの業務処理では、テーブル内のレコードをすべて利用するより、必要に応じて絞り込んだ一部のレコードを利用することの方が多くなります。レコードを絞り込むには、一定の条件が必要になります。

例えば、ある商品の在庫数を知りたい場合は、目的の商品の商品ID(商品コード、品番)を指定し、商品マスターテーブルからそれに合致する1件のレコードを抽出しなければなりません。在庫数が10以下の商品を知りたいなら、「在庫」フィールドが10以下となっているレコードだけを抽出することになります。

このような、一定の条件を指定してそれを満たすレコードだけを抽出し、レコードセットとして取得するためには、SELECT命令にWHERE句を使った条件式を付け加えます。書式は以下のようになります。

  SELECT <列名> FROM <テーブル名> WHERE <条件>

<条件>には、レコードを絞り込むための「条件式」を記述します。条件式は、「特定のフィールドの値がどのような状態なのか」を示す式で、条件を満たす――式の結果が「真(true)」となった場合に、WHERE句がそのレコードを抽出の対象とします。結果が「偽(false)」の場合には、そのレコードを抽出対象にしません。

これによって、SELECT命令では条件を満たすレコードだけを抽出したレコードセットを生成します。


- 条件式の基本 -

例えば、テーブル「商品_mr」から「商品ID」フィールドの値が「550501」の商品を調べたい場合、SQL文は以下のようになります。

  SELECT * FROM 商品_mr WHERE 商品ID = 550501

この場合は*を指定しているので、該当するレコードのすべてのフィールドが抽出されます(画面1)。フィールドを「商品ID」「品名」「在庫」に限定するなら、以下のようにします(画面2)。

  SELECT 商品ID, 品名, 在庫 FROM 商品_mr WHERE 商品ID = 550501

WHERE句に続く「商品ID = 550501」が

  「商品ID」フィールドの値が“550501”と等しいレコード(を抽出せよ)

という条件式になります。





- キーフィールドの省略 -

WHERE句の条件式で指定している「商品ID」フィールドは、レコードを抽出するためのキーとなる「キーフィールド」です。実際のアプリケーションでは、キーフィールドはSQLを発行する直前に明らかになるはずですから、その値を抽出するレコードの中に含めなくても構いません。

先の例では、「550501、ティーポット、108」という3つの値が抽出されますが、以下のようにすると、「ティーポット、108」という2つの値だけが抽出されます(画面3)。

  SELECT 品名, 在庫 FROM 商品_mr WHERE 商品ID = 550501




トップページ
レコードを絞り込む
全レコードを抽出する処理はまれ
WHERE句と条件式
条件式の基本
キーフィールドの省略
複数のレコードを抽出する
複雑な条件を指定する
3つ以上の条件式をつなぐ
あとがき
Copyright © MESCIUS inc. All rights reserved.