のぐそんブログ

暗いおじさんがシコシコ書くブログです。

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でよく使われる命令のようなので、 やれることも多いです。 目的のデータを正しい形で取得できるように練習が必要そうです。