SQL の基本 | DML: データ操作言語 | UNION, UNION ALL
UNION 演算子は、2 つ以上の SELECT 文の結果セットを結合するために使用する。
UNION は 2 つの SQL 文の結果を結合するために使用するコマンドである。この点では UNION は JOIN と少し似ている。どちらのコマンドも複数のテーブルからデータを取得できるためである。ただし UNION には制限があり、2 つの SQL 文で作られるフィールドは同じデータ型でなければならない。また UNION コマンドを使用する場合、重複データは出力されない。これは SELECT DISTINCT と似ている。
UNION の作成条件
- UNION 内の各 SELECT 文は同じ数の列を持つ必要がある。
- 列は類似したデータ型を持つ必要がある。
- 各 SELECT 文の列は同じ順序でなければならない。
UNION ALL も 2 つの SQL 文の結果を結合するために使用するコマンドである。UNION ALL が UNION と異なる点は、UNION ALL ではデータ値が重複していても条件に一致するデータをすべて表示することである。
UNION, UNION ALL 構文
UNION は次のように使用する。
UNION 構文
[SQL文1]
UNION
[SQL文2];
ここには 2 つの SQL 文が入る。
UNION ALL は次のように使用する。
UNION ALL 構文
[SQL文1]
UNION ALL
[SQL文2];
ALL が付く以外は UNION と同じである。
UNION の例
次の 2 つのテーブルがあるとする。
store_information テーブル
| store_name | sales | txn_date |
|---|---|---|
| Los Angeles | 1500 | Jan-05-2018 |
| San Diego | 250 | Jan-07-2018 |
| Los Angeles | 300 | Jan-08-2018 |
| Boston | 700 | Jan-08-2018 |
internet_sales テーブル
| txn_date | sales |
|---|---|
| Jan-07-2018 | 250 |
| Jan-10-2018 | 535 |
| Jan-11-2018 | 320 |
| Jan-12-2018 | 750 |
ここで売上 (sales) の日付をすべて確認する場合は、次の SQL 文を使用できる。
SELECT txn_date FROM store_information
UNION
SELECT txn_date FROM internet_sales;
実行結果は次のとおりである。
| txn_date |
|---|
| Jan-05-2018 |
| Jan-07-2018 |
| Jan-08-2018 |
| Jan-10-2018 |
| Jan-11-2018 |
| Jan-12-2018 |
知っておくべき点として、SQL 文、または両方の句で使用できる場合に SELECT DISTINCT txn_date を使用しても同じ結果になる。
UNION ALL の例
次に、店舗販売およびインターネット売上がある日付を検索する。この場合は次の SQL 文を使用する。
SELECT txn_date FROM store_information
UNION ALL
SELECT txn_date FROM internet_sales;
結果は次のとおりである。
| txn_date |
|---|
| Jan-05-2018 |
| Jan-07-2018 |
| Jan-08-2018 |
| Jan-08-2018 |
| Jan-07-2018 |
| Jan-10-2018 |
| Jan-11-2018 |
| Jan-12-2018 |