SQL UNION

概要:このチュートリアルでは、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を示しています

SQL UNION

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

SQL UNION ALL

結合は、複数のテーブルのを結合する結合とは異なり、UNIONはテーブルのを結合します。

SQL UNIONの例

SQL UNIONの例

Aテーブルからデータを取得するには、次のSELECTステートメントを使用します。

SELECT 
    id
FROM
    A;Code language: SQL (Structured Query Language) (sql)
Table A data

Bテーブルからデータを取得するには、次のステートメントを使用します。

SELECT 
    id
FROM
    B;Code language: SQL (Structured Query Language) (sql)
Table B data

これら2つのクエリの結果セットを結合するには、次のようにUNION演算子を使用します。

SELECT
	id
FROM
	a
UNION
SELECT
	id
FROM
	b;Code language: SQL (Structured Query Language) (sql)
SQL UNION example

UNION演算子は1つの重複行を削除するため、結果セットには3行のみが含まれます。

SQL UNION ALLの例

重複行を保持するには、次のようにUNION ALL演算子を使用します。

SQL UNION ALL example

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)
SQL UNION ORDER BY example

データベースシステムは次の手順を実行します。

  1. まず、各SELECTステートメントを個別に実行します。
  2. 次に、結果セットを結合し、重複行を削除して結合された結果セットを作成します。
  3. 3番目に、ORDER BY句で指定された列で結合された結果セットをソートします。

実際には、異なるテーブルからのデータを結合するためにUNION演算子を使用することがよくあります。次の従業員と扶養家族のテーブルを参照してください。

employees_dependents_tables

次のステートメントでは、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)

試してみる

SQL UNION practical example

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

このチュートリアルは役に立ちましたか?