[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テーブルからデータを取得し、それぞれの役割を示す列を追加して統合した結果を返します。
UNIONの注意点
UNIONを使用する際には、以下の点に注意してください。
列の数と型が一致: UNIONで結合するSELECT文は、同じ数の列を返し、対応する列のデータ型が互換性を持っている必要があります。
列名は最初のSELECT文に従う: 結果の列名は、最初のSELECT文の列名が使用されます。2番目以降のSELECT文で列名が異なっていても無視されます。
ORDER BYは最後に1回だけ: UNIONの結果全体を並び替えたい場合は、最後のSELECT文の後にORDER BYを記述します。
まとめ
今回は、SQLのUNIONとUNION ALLの基本的な使い方とその違いについて学びました。重複を排除したい場合はUNION、全てのデータを含めたい場合はUNION ALLを選びましょう。パフォーマンスを重視する場合は、重複排除が不要ならUNION ALLを使用するのがおすすめです。
SQLマーケティングアカデミーで身につけたSQLスキル、実務でも使ってみませんか?
SheetFlowは、ExcelファイルをアップロードしてSQLで直接操作できるクラウドサービスです。学んだSELECT文やJOIN、集計関数をそのまま業務データに適用し、手作業の集計を自動化できます。
SheetFlowを無料で試す