SQL EXCEPTの意味や使い方を知りたいときはないでしょうか。
けど、そんな中で悩むことは、
・SQL EXCEPTの使い方がわからない
ですよね。
今回はそんなお悩みを解決する
・SQL EXCEPTの使用例
についてまとめます!
もくじ
SQL EXCEPTとは
EXCEPT
は、SQLの演算子の一つで、2つのクエリ結果から重複する部分を除外し、最初のクエリにのみ存在するユニークなレコードを取得するために使用されます。
つまり、SELECT結果の差集合を取得する処理となります。
EXCEPTの使い方
2つのSELECT文の記述
まずは、2つの独立したSELECT文を記述します。これらのクエリは、同じ数と型の列を返す必要があります。
SELECT column1, column2 FROM table1
EXCEPT
SELECT column1, column2 FROM table2;
EXCEPT演算子の挙動
EXCEPT
演算子は、最初のSELECT文によって返された結果から、2番目のSELECT文によって返された結果を除外します。
2つのSELECT文の記述とEXCEPT演算子の挙動についてサンプルデータでみてみましょう。
サンプルデータ
columns: employee_id, name
data:
(1, ‘高橋’)
(2, ‘伊藤’)
(3, ‘鈴木’)
columns: employee_id, name
data:
(3, ‘鈴木’)
(4, ‘松田’)
クエリ
SELECT employee_id, name FROM employees
EXCEPT
SELECT employee_id, name FROM former_employees;
結果
このクエリは、employees テーブルのレコードのうち、former_employees テーブルに存在しないものを取得します。
その結果、高橋 と 伊藤 のレコードが返されます。
WHEREとの組合せ
WHERE句を利用した条件式の記述
WHERE句を使用して、条件を満たすレコードのみを抽出します。
SELECT column1 FROM table1 WHERE condition
EXCEPT
SELECT column1 FROM table2 WHERE condition;
EXCEPTとWHEREの組合せ
両方のSELECT文にWHERE句を用いることで、より具体的な条件に基づいた差分の抽出が可能になります。
実践的な例
2つのテーブルから差分を抽出する
例えば、2つの異なるテーブルから特定の条件を満たすレコードの差分を抽出します。
SELECT column1 FROM table1 WHERE condition
EXCEPT
SELECT column1 FROM table2 WHERE condition;
サンプルデータ
data:
(1, ‘高橋’, 50000)
(2, ‘伊藤’, 60000)
(3, ‘鈴木’, 70000)
data:
(3, ‘鈴木’, 70000)
(4, ‘松田’, 80000)
クエリ
SELECT employee_id, name FROM employees WHERE salary > 55000
EXCEPT
SELECT employee_id, name FROM former_employees WHERE salary > 55000;
結果
このクエリでは、salary が 55000 より大きい employees テーブルのレコードから、
同じ条件を満たす former_employees テーブルのレコードを除外します。
結果として、鈴木 は両方のテーブルに存在しているため、除外されます。返されるのは 伊藤 のみです。
複雑な条件式を利用した抽出
複雑な条件や複数の条件を組み合わせて、より特定の差分を抽出することも可能です。
SELECT column1, column2 FROM table1 WHERE condition1 AND/OR condition2
EXCEPT
SELECT column1, column2 FROM table2 WHERE condition1 AND/OR condition2;
サンプルデータ
columns: employee_id, name, department, salary
data:
(1, ‘山田’, ‘IT’, 60000)
(2, ‘佐藤’, ‘Marketing’, 55000)
(3, ‘田中’, ‘IT’, 50000)
(4, ‘鈴木’, ‘HR’, 70000)
columns: employee_id, name, department, salary
data:
(3, ‘田中’, ‘IT’, 50000)
(5, ‘伊藤’, ‘HR’, 45000)
(6, ‘高橋’, ‘Marketing’, 60000)
クエリ
SELECT employee_id, name FROM employees WHERE department = 'IT' AND salary > 55000
EXCEPT
SELECT employee_id, name FROM former_employees WHERE department = 'IT' AND salary > 55000;
実行結果の説明
結果
このクエリは、employees テーブルから department が ‘IT’ で、かつ salary が 55000 より大きい従業員を選択します。
それに対し、former_employees テーブルでも同じ条件を満たす従業員を選択し、その結果を除外します。
former_employees テーブルでは、この条件を満たす従業員はいない
したがって、最終的な結果として、山田 のレコードのみが返されます。
まとめ
今回は、
・SQL EXCEPTの使用例
についてまとめました。
EXCEPT
演算子は、2つのクエリ結果の差分を見つける際に非常に有用です。
特に、データの整合性をチェックする際や、異なるデータソース間でのデータの比較に役立つでしょう。