こんにちは、阿久梨絵です!
SQL で複数のテーブルを組み合わせる場合、JOIN と UNION はそれぞれ異なる用途で使われます。
・JOIN → 異なるテーブルの関連データを結合する(行ごとの結びつけ)
・UNION → 同じ構造のデータを統合する(縦にデータを結合)
それでは、具体的な使い方と活用シーンを解説します!
1. JOIN(テーブル同士を横に結合)
内部結合(INNER JOIN):共通データのみ取得
共通のキーで2つのテーブルを結合
SELECT e.employee_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
・一致するデータのみを取得し、余計なデータは含まない。
外部結合(LEFT JOIN / RIGHT JOIN):片方のテーブルも保持
LEFT JOIN
左側のテーブルはすべて取得、関連データがない場合はNULL
SELECT e.employee_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;
・部門が未登録でも社員データは取得可能!
RIGHT JOIN
右側のテーブルはすべて取得、左にデータがなくてもNULL
SELECT e.employee_name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;
・部門に紐づく社員がいなくても、部門データは保持される!
完全外部結合(FULL JOIN):全データを統合
LEFTとRIGHTの両方を組み合わせ、両方のテーブルのデータを取得
SELECT e.employee_name, d.department_name
FROM employees e
FULL JOIN departments d ON e.department_id = d.department_id;
どちらのテーブルにもないデータはNULLになる(全データを網羅)
2. UNION(同じ構造のデータを縦に結合)
UNION:異なるテーブルのデータを統合(重複を削除)
社員と取引先のデータをひとつの一覧にまとめる
SELECT employee_name AS name, ‘社員’ AS type FROM employees
UNION
SELECT client_name AS name, ‘取引先’ AS type FROM clients;
・異なるテーブルでも、列構造が同じなら結合可能!
・重複データは自動で削除される
UNION ALL:重複データも含めて結合
UNION ALL を使うと、完全なデータセットを保持。
SELECT employee_name AS name, ‘社員’ AS type FROM employees
UNION ALL
SELECT client_name AS name, ‘取引先’ AS type FROM clients;
・UNION ALL は重複データもそのまま表示!
・パフォーマンス向上のため、UNION より処理が軽い
JOINとUNIONの使い分け:どちらを使うべき?
用途 | JOIN | UNION |
---|---|---|
異なるテーブルの関連データを統合 | 〇 | ✕ |
同じ構造のデータをまとめる | ✕ | 〇 |
縦方向のデータ統合(リスト統合) | ✕ | 〇 |
横方向のデータ統合(関連付け) | 〇 | ✕ |
パフォーマンスが重視される | 〇(索引活用可能) | 〇(UNION ALL が高速) |
NULLの処理を考慮する必要がある | 〇 | ✕ |
結論:データの構造に応じて適切な方法を選ぶ!
・関係性のあるデータ → JOIN
・同じ型のデータ統合 → UNION
まとめ
・JOIN → テーブル同士を横に結合して、関連データを統合
・INNER JOIN → 共通データのみ取得
・LEFT/RIGHT JOIN → 片方のデータを保持(NULL考慮)
・FULL JOIN → 両方のテーブルのデータを統合
・UNION → 同じ型のデータを結合し、重複を削除
・UNION ALL → 重複データも含めて統合(高速処理)
SQL のデータ結合テクニックを使いこなせば、複雑なデータ統合がスムーズに!
実際の業務で活用できるよう、適切な方法を選んでみてください。
阿久梨絵でした!