とにかく、テーブルからレコードを取り出さなければ話は始まりません。SELECT命令はSQLによるデータベース操作の基本です。
- 基本書式 -
SELECT命令を使った構文の基本的な書式は、以下のようになります。
SELECT <フィールド名>(, <フィールド名>, <フィールド名> ...)
FROM <テーブル名>
(SELECT、FROMなどの予約語やフィールド名の前で改行しても構いません。
但し、語の途中で改行してはいけません)
FORMは句で、フィールドを選択する対象のテーブルを指定します。FROM句に続く<テーブル名>で示されたテーブルから、<フィールド名>で示すフィールドの値を取り出します。
- フィールド名の列挙 -
フィールド名は「,」で区切って複数指定できます。例えば、以下のようなフィールド構成のテーブル「商品_mr」※1があったとします(表1、画面1)。
商品ID 品名 販売単価 仕入単価 在庫
このテーブルのすべてのフィールドを取り出すSQL文は、以下のようになります。
SELECT 商品ID, 品名, 販売単価, 仕入単価, 在庫
FROM 商品_mr ---- (1)
すべてのフィールドの値を取り出したい場合は、「*」記号を使えます。その場合、フィールドの並び順は、元のテーブルのフィールド構成と同じになります。
SELECT * FROM 商品_mr ---- (2)
(2)の処理結果は、先の(1)のSQL文の場合と同じになります。ここではSQL Server 2000で管理されているデータベースに対して、クエリアナライザからSQLを発行した結果を掲げておきます。
※1 |
テーブルには、商品や顧客、社員など基本的な情報を記録する基本表(マスターテーブル)と、それを基に売上や仕入、勤怠状況など日々の業務内容を記録する取引表、さらに最終的な業務内容を定着記録する定着表があります。この記事で用いるサンプルでは、それらテーブルの役割を区別するため、テーブル名の後尾に基本表には「_mr」、定着表には「_fx」という記号を付けています。もちろん便宜的なもので、決まりではありません |
表1:商品の基本情報を記録したテーブル「商品_mr」のフィールド構成
キー |
ID |
名前 |
データ型 |
サイズ |
NULL |
デフォルト |
★ |
- |
商品ID |
int |
4 |
- |
(0) |
- |
- |
品名 |
nvarchar |
30 |
レ |
- |
- |
- |
販売単価 |
money |
8 |
レ |
(0) |
- |
- |
仕入単価 |
money |
8 |
レ |
(0) |
- |
- |
在庫 |
int |
4 |
レ |
(0) |
- フィールドの限定と順序の変更 -
先の例に使ったテーブルから、SELECT命令で「商品ID」「品名」「在庫」のフィールドだけを取り出して表示したい場合、基本的には以下のようなSQL文を記述します。
SELECT 商品ID, 品名, 在庫 FROM 商品_mr -------- (3)
「,」で区切って複数のフィールド名を列挙した場合、処理結果にはSQLで記述した順にフィールドの値が並べられます。処理内容によっては、フィールドの並び順を変えて表示したい場合もあるでしょう。
例えば、在庫数の少ない(または多い)商品を探したいような場合、商品IDや商品名より先に在庫数を表示した方が分かりやすくなります。そのような場合には、以下のように記述できます。
SELECT 在庫, 商品ID, 品名 FROM 商品_mr -------- (4)
フィールドの限定(3)と順序の変更(4)、2つの処理結果を比べてみましょう。これも、クエリアナライザでSQLを発行した結果の画面です。
- 無駄なフィールドを指定しない -
すべてのフィールドを元通りの並び順で表示する「*」記号は非常に便利で、いちいちフィールド名を列挙するのが面倒だからと、ついつい“SELECT *”を使ってしまいがちです。
フィールド数の少ないシンプルなテーブルならともかく、フィールド数の多い複雑なテーブルで「*」を使ってしまうと、本来は必要のない(そのときの処理では利用しない)フィールドのデータまですべて読み込んでしまうことになります。
SELECT命令の処理結果は、レコードセットとしてSQLを発行したクライアントに渡されます。不要なフィールドを指定するとサーバーに余計な負荷をかけることになり、さらに無駄なデータがたくさんネットワーク上を流れ、クライアントのメモリなどリソースも消費されます。
特に大規模なデータベースでは、そのときの処理に必要なフィールドだけを明確に指定するよう、心がけましょう。
- フィールドの別名 -
処理によっては、本来のフィールド名を異なる名前に変更したい場合があります。例えば、販売部門のシステムでデータが顧客の目に触れる可能性のある場合、「仕入単価」は見えないようにしておき、「販売単価」を単に「単価」というフィールド名で扱う方がよいはずです。また、アプリケーションで、複数のデータベースに格納されているテーブル同士を連携させる場合、同じ意味を持つフィールドが異なる名前になっていると間違いの元です。
そのようなときには、AS句を使ってフィールド名にエイリアス(別名)を付けます。構文の書式は、以下のようになります。
SELECT <フィールド名> AS <別名> FROM <テーブル名>
テーブル「商品_mr」から「商品ID→品番」「品名→商品」「販売単価→単価」という形で別名を設定し、この3つのフィールドの値だけを表示させるなら、SQLは以下のようになります。
SELECT 商品ID AS 品番 ,
品名 AS 商品 ,
販売単価 AS 単価
FROM 商品_mr
|
|
|