概要:このチュートリアルでは、SQL UNIONを使用して複数のクエリからの2つ以上の結果セットを結合する方法と、UNIONとUNION ALLの違いについて説明します。
SQL UNION演算子の概要
UNION演算子は、2つ以上のSELECTステートメントの結果セットを単一の結果セットに結合します。次のステートメントは、UNION演算子を使用して2つのクエリの結果セットを結合する方法を示しています。
SELECT
column1, column2
FROM
table1
UNION [ALL]
SELECT
column3, column4
FROM
table2;
Code language: SQL (Structured Query Language) (sql)
UNION演算子を使用するには、個々のSELECTステートメントを記述し、それらをキーワードUNIONで結合します。
SELECTステートメントによって返される列は、同じまたは変換可能なデータ型、サイズを持ち、同じ順序である必要があります。
データベースシステムは、最初に2つのSELECTステートメントを実行してクエリを処理します。次に、2つの個別の結果セットを1つに結合し、重複する行を削除します。重複行を削除するために、データベースシステムは、結合された結果セットをすべての列でソートし、隣接する一致する行をスキャンします。
結果セットに重複行を保持するには、UNION ALL演算子を使用します。
たとえば、2つの結果セットA(1,2)とB(2,3)があるとします。次の図はA UNION Bを示しています

次の図はA UNION ALL Bを示しています

結合は、複数のテーブルの列を結合する結合とは異なり、UNIONはテーブルの行を結合します。
SQL UNIONの例
SQL UNIONの例
Aテーブルからデータを取得するには、次のSELECTステートメントを使用します。
SELECT
id
FROM
A;
Code language: SQL (Structured Query Language) (sql)

Bテーブルからデータを取得するには、次のステートメントを使用します。
SELECT
id
FROM
B;
Code language: SQL (Structured Query Language) (sql)

これら2つのクエリの結果セットを結合するには、次のようにUNION演算子を使用します。
SELECT
id
FROM
a
UNION
SELECT
id
FROM
b;
Code language: SQL (Structured Query Language) (sql)

UNION演算子は1つの重複行を削除するため、結果セットには3行のみが含まれます。
SQL UNION ALLの例
重複行を保持するには、次のようにUNION ALL演算子を使用します。

SQL UNIONとORDER BYの例
結果セットをソートするには、次のように、すべてのSELECTステートメントの後にORDER BY句を配置します。
SELECT
id
FROM
a
UNION
SELECT
id
FROM
b
ORDER BY id DESC;
Code language: SQL (Structured Query Language) (sql)

データベースシステムは次の手順を実行します。
- まず、各SELECTステートメントを個別に実行します。
- 次に、結果セットを結合し、重複行を削除して結合された結果セットを作成します。
- 3番目に、ORDER BY句で指定された列で結合された結果セットをソートします。
実際には、異なるテーブルからのデータを結合するためにUNION演算子を使用することがよくあります。次の従業員と扶養家族のテーブルを参照してください。

次のステートメントでは、UNION演算子を使用して、従業員と扶養家族の姓と名を結合します。
SELECT
first_name,
last_name
FROM
employees
UNION
SELECT
first_name,
last_name
FROM
dependents
ORDER BY
last_name;
Code language: SQL (Structured Query Language) (sql)

このチュートリアルでは、UNION演算子を使用して、複数のクエリからの2つ以上の結果セットを結合する方法を学びました。