コンテンツにスキップ

SELECT (SQL)

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Escarbot (会話 | 投稿記録) による 2008年12月12日 (金) 22:14個人設定で未設定ならUTC)時点の版 (ロボットによる 追加: pt:Select (SQL))であり、現在の版とは大きく異なる場合があります。

SELECTステートメントは、1つもしくは複数のテーブルからデータを抽出する、SQLにおけるデータ操作言語 (DML)ステートメントの1つである。

これは、データベースの1つもしくは複数のテーブルからデータを抽出するための命令で、データ操作言語 (DML)の中では最もよく使用される。プログラマはどのような結果を欲しいのかをSQL文で記述する必要はあるが、その結果を取得するためにどのような物理的な操作が実行されるのかを指示する必要はなく、データベースシステム(クエリオプティマイザ)がそのSQL文から最適なクエリプラン(実行計画)を作成する。

なお、「テーブル」は「表」、「行」は「レコード」、「列」は「項目」と呼ぶこともある。

文法

 SELECT [ALL | DISTINCT] 列名 [,列名...]
 FROM テーブル名 [,テーブル名...]
 [WHERE 条件式]
 [GROUP BY 列名 [HAVING 条件式]]
 [ORDER BY 列名]
 GROUP BY 列名[,列名...]
 ORDER BY 列名[,列名...]
ALL/DISTINCTの指定
ALL...テーブルに同じデータ行がある場合でもすべてのデータを返す。指定がない場合はALLが選択される
DISTINCT...テーブルに同じデータ行がある場合、重複を取り除いた1件のみを返す
WHERE句
WHERE句は、データを抽出する条件式を指定する。また、テーブル間結合を行う際には、その結合関係を指定する。
GROUP BY句
GROUP BY句は、グループ化する列名または列名を含んだ式を指定する。なお、HAVING句は、GROUP BY句で集計した結果に対して抽出条件を指定する際に使用する
ORDER BY句
ORDER BY句は、ソートする列または列を含んだ式を指定する。カンマで区切ることで、複数列を指定できる。
ASC(ascending order)指定は、昇順(デフォルト)。DESC(descending order)指定は、降順。

サンプル

テーブル "T" SQL文 結果
C1 C2
1 a
2 b
SELECT * FROM T;
C1 C2
1 a
2 b
C1 C2
1 a
2 b
SELECT C1 FROM T;
C1
1
2
C1 C2
1 a
2 b
SELECT * FROM T WHERE C1 = 1;
C1 C2
1 a
C1 C2
1 a
2 b
SELECT * FROM T ORDER BY C1 DESC;
C1 C2
2 b
1 a

右図のテーブル"T"欄のテーブルに対して、SQL文 SELECT * FROM T; を実行すると、結果欄に示されているように、テーブル"T"のすべての行とすべての列が返される。

同じテーブル"T"に対して、SQL文 SELECT C1 FROM T; を実行すると、テーブル"T"のすべての行の列C1のみが返される。これは、関係代数 における「射影」に相当する。

同じテーブル"T"に対して、SQL文 SELECT * FROM T WHERE C1 = 1; を実行すると、列C1 の値が 1 であるすべて行のすべての列が返される。これは、関係代数 における「選択」に相当する。

最後のSQL文 SELECT * FROM T ORDER BY C1 DESC; は最初のSQL文と同じ行を返すが、並び順が、ORDER BY句により、C1に対して降順(Z-A)になる。ORDER BY句で複数列を指定する場合は、カンマで区切る。例:ORDER BY C1 ASC, C2 DESC(この場合、列C1に対しては昇順、列C2に対しては降順になる。)