SQLのEXISTS句とNOT EXISTS句の違いを徹底解説

この記事では、SQLでよく使用されるEXISTS句とNOT EXISTS句について、その違いと使用例を詳しく解説します。

目次

EXISTS句とは

EXISTS句は、サブクエリが一つ以上の行を返すかどうかを判断するSQLの条件です。サブクエリが一つ以上の行を返す場合、EXISTS句は真(TRUE)を返します。

基本的な使用例

SELECT * FROM employees
WHERE EXISTS (
  SELECT 1 FROM department
  WHERE employees.department_id = department.id
);

表での説明

employeesテーブルdepartmentテーブル
ID: 1, Name: 田中ID: 1, Name: 人事
ID: 2, Name: 鈴木ID: 2, Name: 営業
テーブル名称1

この例では、`employees`テーブルの各行について、`department`テーブルで対応する`department_id`が存在するかどうかを判断しています。

NOT EXISTS句とは

NOT EXISTS句は、EXISTS句の逆であり、サブクエリが行を返さない場合に真(TRUE)を返します。

基本的な使用例

SELECT * FROM employees
WHERE NOT EXISTS (
  SELECT 1 FROM department
  WHERE employees.department_id = department.id
);

表での説明

employeesテーブルdepartmentテーブル
ID: 3, Name: 佐藤ID: 3, Name: なし
テーブル名称2

この例では、`employees`テーブルの各行について、`department`テーブルで対応する`department_id`が存在しないかどうかを判断しています。

EXISTS句とNOT EXISTS句の違い

EXISTS句とNOT EXISTS句の主な違いは、サブクエリの結果に対する評価方法です。EXISTSはサブクエリが1行以上返すと真を返し、NOT EXISTSはサブクエリが0行を返すと真を返します。

EXISTS句NOT EXISTS句
サブクエリが1行以上なら真サブクエリが0行なら真
テーブル名称3

まとめ

EXISTS句とNOT EXISTS句はSQLでよく使用される条件の一つですが、その働きは対照的です。EXISTS句はサブクエリが1行以上返す場合に真を返し、NOT EXISTS句はサブクエリが0行を返す場合に真を返します。適切に使い分けることで、SQLのクエリがより効率的になります。

コメント

コメントする

目次