[SQLの基本]UNION入門: UNIONとUNION ALLの使い方
投稿日:
はじめに
SQLでは、複数のSELECT文の結果を結合して一つの結果セットとして取得することができます。そのための便利な機能がUNIONとUNION ALLです。これらの操作を使うことで、異なるクエリの結果を結合し、重複の有無に応じてデータを整理することができます。今回は、UNIONとUNION ALLの基本的な使い方とその違いについて解説します。
UNION
UNION演算子は、複数のSELECT文の結果を結合し、重複を排除して一つの結果セットとして返します。
SELECT
column1,
column2
FROM table1
UNION
SELECT
column1,
column2
FROM table2;
例 employeesテーブルとテーブルmanagersから、全ての従業員と管理職の名前を取得するクエリは次の通りです。
SELECT
first_name,
last_name
FROM employees
UNION
SELECT
first_name,
last_name
FROM managers;
このクエリは、employeesとmanagersの両方のテーブルから名前を取得し、重複を排除して結果を返します。
UNION ALL
UNION ALL演算子は、複数のSELECT文の結果を結合し、重複を排除せずに一つの結果セットとして返します。UNIONと異なり、全ての結果行をそのまま返します。
SELECT
column1,
column2
FROM table1
UNION ALL
SELECT
column1,
column2
FROM table2;
例 employeesテーブルとテーブルmanagersから、全ての従業員と管理職の名前を重複を含めて取得するクエリは次の通りです。
SELECT
first_name,
last_name
FROM employees
UNION ALL
SELECT
first_name,
last_name
FROM managers;
このクエリは、employeesとmanagersの両方のテーブルから名前を取得し、重複を含めて結果を返します。
UNIONとUNION ALLの違い
UNIONとUNION ALLの主な違いは、重複する行の扱いです。
UNION: 重複する行を排除して結果を返します。
UNION ALL: 重複する行をそのまま含めて結果を返します。
この違いにより、使用する場面が異なります。データの重複を避けたい場合はUNIONを使用し、全てのデータをそのまま結合したい場合はUNION ALLを使用します。
パフォーマンスの違い
UNIONは、結果セットから重複を排除するために追加の処理が必要です。そのため、UNION ALLと比較してパフォーマンスが低下する可能性があります。大量のデータを扱う場合は、パフォーマンスを考慮して適切な演算子を選択することが重要です。
異なるテーブルからのデータを結合
異なるテーブルから同じ種類のデータを取得し、統合する場合にUNIONを使用できます。
SELECT
employee_id,
first_name,
last_name
FROM employees
UNION
SELECT
manager_id AS employee_id,
first_name,
last_name
FROM managers;
このクエリは、employeesテーブルとmanagersテーブルから同じ列名のデータを取得し、統合して返します。
サブクエリでの使用
UNIONやUNION ALLは、サブクエリとしても使用できます。
SELECT
*
FROM (
SELECT
first_name,
last_name,
'Employee' AS role
FROM employees
UNION
SELECT
first_name,
last_name,
'Manager' AS role
FROM managers
) AS all_people;
このクエリは、employeesとmanagersテーブルからデータを取得し、それぞれの役割を示す列を追加して統合した結果を返します。
まとめ
今回は、SQLのUNIONとUNION ALLの基本的な使い方とその違いについて学びました。これらの演算子を使いこなすことで、複数のテーブルやクエリの結果を効果的に結合することができます。次回の記事では、さらに高度なSQLクエリやデータベース操作について詳しく解説していきます。ぜひご期待ください!