|
クエリの結合
2つのクエリの出力を比較し、和・積・差の3種類で結合することができます。
和結合:UNION, UNION ALL
積結合:INTERSECT
差結合:EXCEPT(OracleではMINUS)
文法:SELECT * | <列名1>, <列名2>…
FROM <テーブル名>
<WHERE 条件式>…
[UNION | UNION ALL | INTERSECT | EXCEPT | MINUS]
SELECT * | <列名1>, <列名2>…
FROM <テーブル名>
<WHERE 条件式>…
|
※1つ目のクエリと2つ目のクエリでは、
抽出される列数とデータ型が一致している必要があります
***例(UNION)***
UNIONは和結合であり、ALLを指定しない場合は、
取得したデータの和(いずれかのクエリで抽出されたもの)から
重複するデータを排除してデータを取得します。
例では、1月1日と1月2日のいずれかに売り上げのあった商品の一覧を出力します。
[売上表]
売上日 |
商品名 |
売上数量 |
売上金額 |
2013/01/01 |
りんご |
3 |
300 |
2013/01/01 |
みかん |
8 |
960 |
2013/01/01 |
ぶどう |
10 |
500 |
2013/01/02 |
りんご |
5 |
500 |
2013/01/02 |
みかん |
2 |
240 |
2013/01/02 |
バナナ |
1 |
200 |
[実行SQL]
SELECT 商品名 FROM 売上表 WHERE 売上日 = '2013/01/01'
UNION
SELECT 商品名 FROM 売上表 WHERE 売上日 = '2013/01/02'
|
[結果]
***例(UNION ALL)***
UNIONは和結合であり、ALLを指定した場合は、
取得したデータの和(いずれかのクエリで抽出されたもの)から
重複するデータを含み取得します。
例では、1月1日と1月2日のいずれかに売り上げのあった商品の一覧を出力します。
[売上表]
売上日 |
商品名 |
売上数量 |
売上金額 |
2013/01/01 |
りんご |
3 |
300 |
2013/01/01 |
みかん |
8 |
960 |
2013/01/01 |
ぶどう |
10 |
500 |
2013/01/02 |
りんご |
5 |
500 |
2013/01/02 |
みかん |
2 |
240 |
2013/01/02 |
バナナ |
1 |
200 |
[実行SQL]
SELECT 商品名 FROM 売上表 WHERE 売上日 = '2013/01/01'
UNION ALL
SELECT 商品名 FROM 売上表 WHERE 売上日 = '2013/01/02'
|
[結果]
商品名 |
りんご |
みかん |
ぶどう |
りんご |
みかん |
バナナ |
***例(INTERSECT)***
INTERSECTは積結合であり、
取得したデータの積(両方のクエリで抽出されたもの)を取得します。
例では、1月1日と1月2日の両方に売り上げのあった商品の一覧を出力します。
[売上表]
売上日 |
商品名 |
売上数量 |
売上金額 |
2013/01/01 |
りんご |
3 |
300 |
2013/01/01 |
みかん |
8 |
960 |
2013/01/01 |
ぶどう |
10 |
500 |
2013/01/02 |
りんご |
5 |
500 |
2013/01/02 |
みかん |
2 |
240 |
2013/01/02 |
バナナ |
1 |
200 |
[実行SQL]
SELECT 商品名 FROM 売上表 WHERE 売上日 = '2013/01/01'
INTERSECT
SELECT 商品名 FROM 売上表 WHERE 売上日 = '2013/01/02'
|
[結果]
***例(EXCEPT | MINUS)***
EXCEPT(Oracle では MINUS)は差結合であり、
取得したデータの差(1つ目のクエリで取得されたものから
2つ目のクエリで取得されたものを除いたもの)を取得します。
例では、1月1日に売り上げがあり、1月2日に売り上げのなかった商品の
一覧を出力します。
[売上表]
売上日 |
商品名 |
売上数量 |
売上金額 |
2013/01/01 |
りんご |
3 |
300 |
2013/01/01 |
みかん |
8 |
960 |
2013/01/01 |
ぶどう |
10 |
500 |
2013/01/02 |
りんご |
5 |
500 |
2013/01/02 |
みかん |
2 |
240 |
2013/01/02 |
バナナ |
1 |
200 |
[実行SQL]
--SQL Server, PostgreSQLの場合
SELECT 商品名 FROM 売上表 WHERE 売上日 = '2013/01/01'
EXCEPT
SELECT 商品名 FROM 売上表 WHERE 売上日 = '2013/01/02'
--Oracleの場合
SELECT 商品名 FROM 売上表 WHERE 売上日 = '2013/01/01'
MINUS
SELECT 商品名 FROM 売上表 WHERE 売上日 = '2013/01/02'
|
[結果]
|
<<PR>>
価格:300円
価格:300円
|