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