これらは 2 つの query results を組み合わせる set operations です。UNION は rows を結合し(duplicates を除去)、INTERSECT は両方に存在する rows を返し、EXCEPT は最初にはあるが 2 番目にはない rows を返します。JOIN が columns を横方向に結合するのに対し、set operations は result sets を縦方向に扱います。
これらは 2 つの query results を組み合わせる set operations です。UNION は rows を結合し(duplicates を除去)、INTERSECT は両方に存在する rows を返し、EXCEPT は最初にはあるが 2 番目にはない rows を返します。JOIN が columns を横方向に結合するのに対し、set operations は result sets を縦方向に扱います。
SELECT name, email FROM customers
UNION
SELECT name, email FROM suppliers;
-- → BOTH tables から distinct names/emails、duplicates なし
-- UNION ALL — duplicates を残す(dedup step がないので速い)
SELECT name FROM customers
UNION ALL
SELECT name FROM suppliers;
UNION は 2 つの query の rows を stack します。両 query は compatible columns(同じ数、互換 type)を持つ必要があります。UNION ALL は duplicates を残し、deduplication しないため高速です。
-- customers でも suppliers でもある people
SELECT email FROM customers
INTERSECT
SELECT email FROM suppliers;
-- suppliers ではない customers
SELECT email FROM customers
EXCEPT
SELECT email FROM suppliers;
Set operations の requirements:
✓ 両 query の column 数が同じ
✓ 対応する columns の types が compatible
✓ column names は first query から来る
UNION → duplicates を除去(extra work — sort/compare)
UNION ALL → all rows を保持(faster)— dedup 不要ならこちらを優先
JOIN → tables を HORIZONTALLY に結合(related rows の columns を追加)
UNION → results を VERTICALLY に結合(別 query の rows を stack)
Set operations は似た result sets を merge、intersection、subtract するために便利です。特に UNION と UNION ALL の違いは performance に関係します。dedup が不要なら UNION ALL を使う方が速いです。
JOIN と UNION は目的が違います。related data を横に結合するなら JOIN、同じ形の結果を縦にまとめるなら UNION です。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する