集合演算
集合演算は2つのSELECT結果を結合したり、共通部分や差分を求めたりします。 UNION / INTERSECT / EXCEPT
基本文法
SELECT ... UNION SELECT ...
SELECT ... UNION ALL SELECT ...
SELECT ... INTERSECT SELECT ...
SELECT ... EXCEPT SELECT ...例題
UNIONで重複を除いて結合
開発部署の社員と高給与の社員を結合し、重複する行を除きます。
SELECT name, department_id, salary
FROM employees WHERE department_id = 1
UNION
SELECT name, department_id, salary
FROM employees WHERE salary >= 6000000
ORDER BY salary DESC;UNION ALLでそのまま結合
重複を除かずに結果を結合します。
SELECT 'employee' AS entity_type, name AS entity_name FROM employees
UNION ALL
SELECT 'department', name FROM departments;INTERSECTで共通部分を取得
高給与の社員の部署IDと、2021年以前に入社した社員の部署IDの共通部分を求めます。
SELECT department_id FROM employees WHERE salary >= 6000000
INTERSECT
SELECT department_id FROM employees WHERE hire_date < '2021-01-01';EXCEPTで差分を取得
全社員のIDから注文した社員のIDを除きます。
SELECT id FROM employees
EXCEPT
SELECT DISTINCT employee_id FROM orders;知っておくと便利なこと
- 両方のSELECTはカラム数を合わせます。結果のカラム名は最初のSELECTを基準にします。
- UNIONは重複を除く処理が必要です。重複を残してよい場合はUNION ALLを使います。
- 結果全体のORDER BYは最後に1回だけ書きます。