SELECT文だけの修飾メモ
SELECT文だけの修飾
DISTINCT
検索結果の中で重複した行を取り除いてくれます。 用途としては、データの種類を取得する場合などに使用します。
SELECT DISTINCT 列名 FROM テーブル名
下記のテーブルがあるとした場合、 DISTINCT を使用して、nameの種類を取得できます。
◎userテーブル
name |
---|
sato |
kato |
suzuki |
sato |
kato |
sato |
下記で実行。
SELECT DISTINCT name FROM user
◎結果
name |
---|
sato |
kato |
suzuki |
ORDER BY
検索結果の並び替えに使用します。 並び替える列は、列名、もしくは列番号で指定します。
SELECT 列名 FROM テーブル名 ORDER BY 列名(列番号) 並び順(ASC もしくは DESC。デフォルトはASC)
ASC ・・・ 昇順 DESC ・・・降順
◎userテーブル
age |
---|
20 |
25 |
19 |
30 |
45 |
50 |
下記で実行。
SELECT age FROM user ORDER BY age DESC
◎結果
age |
---|
50 |
45 |
30 |
25 |
20 |
19 |
複数行で並べ替える
ORDER BYをカンマで区切ることで、複数の条件で並び替えができることができます。
SELECT 列名 FROM テーブル名 ORDER BY 列名1(列番号) 並び順 , 列名2(列番号) 並び順
上記の場合は列名1で並び替えたあと、さらに列名2で並び替えます。
◎userテーブル
age | height |
---|---|
20 | 170 |
20 | 160 |
19 | 170 |
30 | 160 |
20 | 180 |
50 | 170 |
下記で実行。
SELECT * FROM user ORDER BY age DESC, height DESC
◎結果
age | height |
---|---|
50 | 170 |
30 | 160 |
20 | 180 |
20 | 170 |
20 | 160 |
19 | 170 |
SELECT
SELECT文はテーブルの先頭から、取得数をしていしてデータを取り出す。 取得開始の位置も設定できる。
SELECT 列名 FROM テーブル名 LIMIT 取得行数 OFFSET 先頭から除外する行数
◎userテーブル
age |
---|
20 |
25 |
19 |
30 |
45 |
50 |
下記で実行。
SELECT age FROM user LIMIT 2 OFFSET 2
◎結果
age |
---|
30 |
25 |
集合演算子
同じ構造の複数のテーブルのデータを扱う場合に集合演算子を使う。 集合演算子を使う場合は、それぞれのテーブルの列数と、データの型を一致させておく必要があります。
もし、列数が合わない場合などはNULLなどを追加して揃えて数を一致させる。
UNION(和集合)
UNIONはテーブルと、テーブルの検索結果の足し合わせに使います。 ALLキーワードを付けると重複した行もそのまま表示されます。 ALLキーワードがついていない場合は、重複した行は1行で表示されます。
SELECT 列名 FROM テーブルA UNION (ALL) SELECT 列名 FROM テーブルB
◎userAテーブル
age |
---|
20 |
25 |
19 |
30 |
45 |
50 |
◎userBテーブル
age |
---|
50 |
65 |
70 |
下記で実行
SELECT age FROM userA UNION SELECT age FROM userB
◎結果
ALLキーワードを使ってないので重複している「50」は1行にまとめて表示される。
age |
---|
20 |
25 |
19 |
30 |
45 |
50 |
65 |
70 |
EXCEPT / MINUS(差集合)
EXCEPTはそれぞれのテーブルの検索結果の差分を求められます。 Oracle DBの場合はMINUSを使います。
SELECT 列名 FROM テーブルA EXCEPT (ALL) SELECT 列名 FROM テーブルB
注意
EXCEPTで注意が必要なのは、SELECTの順番です。
先に指定したのが検索結果から、後に指定した検索結果省くので、 先に指定したのがテーブルのデータが基準となります。
A - B と B - Aは結果が異なります。
INTERSECT(積集合)
INTERSECTは2つの検索結果の共通する行を集めます。
SELECT 列名 FROM テーブルA INTERSECT (ALL) SELECT 列名 FROM テーブルB
まとめ
SELECT文はSQLでよく使われる命令のようなので、 やれることも多いです。 目的のデータを正しい形で取得できるように練習が必要そうです。