SQL EXCEPTで差分を抽出する方法!WHEREとの組合せも!

かんたん!SQL





SQL EXCEPTの意味や使い方を知りたいときはないでしょうか。


けど、そんな中で悩むことは、

・SQL EXCEPTの意味がわからない
・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演算子の挙動についてサンプルデータでみてみましょう。

サンプルデータ

table1: employees
columns: employee_id, name
data:
(1, ‘高橋’)
(2, ‘伊藤’)
(3, ‘鈴木’)
table2: former_employees
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;

サンプルデータ

table1: employees に salary 列を追加
data:
(1, ‘高橋’, 50000)
(2, ‘伊藤’, 60000)
(3, ‘鈴木’, 70000)
table2: former_employees に salary 列を追加
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;

サンプルデータ

table1: employees
columns: employee_id, name, department, salary
data:
(1, ‘山田’, ‘IT’, 60000)
(2, ‘佐藤’, ‘Marketing’, 55000)
(3, ‘田中’, ‘IT’, 50000)
(4, ‘鈴木’, ‘HR’, 70000)
table2: former_employees
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 テーブルでも同じ条件を満たす従業員を選択し、その結果を除外します。

employees テーブルでは、条件を満たす従業員は 山田
former_employees テーブルでは、この条件を満たす従業員はいない

したがって、最終的な結果として、山田 のレコードのみが返されます。

まとめ

今回は、

・SQL EXCEPTで差分を抽出する方法
・SQL EXCEPTの使用例

についてまとめました。

EXCEPT演算子は、2つのクエリ結果の差分を見つける際に非常に有用です。

特に、データの整合性をチェックする際や、異なるデータソース間でのデータの比較に役立つでしょう。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。