SQL の高度なデータ結合:JOINとUNIONの違いと使い分け方

こんにちは、阿久梨絵です!
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の使い分け:どちらを使うべき?

用途JOINUNION
異なるテーブルの関連データを統合
同じ構造のデータをまとめる
縦方向のデータ統合(リスト統合)
横方向のデータ統合(関連付け)
パフォーマンスが重視される〇(索引活用可能)〇(UNION ALL が高速)
NULLの処理を考慮する必要がある

結論:データの構造に応じて適切な方法を選ぶ!

関係性のあるデータ → JOIN
同じ型のデータ統合 → UNION

まとめ

JOIN → テーブル同士を横に結合して、関連データを統合
INNER JOIN → 共通データのみ取得
LEFT/RIGHT JOIN → 片方のデータを保持(NULL考慮)
FULL JOIN → 両方のテーブルのデータを統合
UNION → 同じ型のデータを結合し、重複を削除
UNION ALL → 重複データも含めて統合(高速処理)

SQL のデータ結合テクニックを使いこなせば、複雑なデータ統合がスムーズに!
実際の業務で活用できるよう、適切な方法を選んでみてください。
阿久梨絵でした!

Verified by MonsterInsights