nullジマ

集合演算

集合演算は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回だけ書きます。