SQL EXISTS

概要:このチュートリアルでは、SQLのEXISTS演算子を使用して、サブクエリに任意の行が含まれているかどうかをテストする方法を学習します。

SQL EXISTS演算子の紹介

EXISTS演算子を使用すると、行の存在をテストするためのサブクエリを指定できます。以下は、EXISTS演算子の構文を示しています。

EXISTS (subquery)
Code language: SQL (Structured Query Language) (sql)

サブクエリに任意の行が含まれている場合、EXISTS演算子はtrueを返します。それ以外の場合は、falseを返します。

EXISTS演算子は、行が見つかり次第、クエリ処理を直ちに終了します。そのため、EXISTS演算子のこの機能を利用して、クエリのパフォーマンスを向上させることができます。

SQL EXISTS演算子の例

サンプルデータベースemployeesテーブルとdependentsテーブルをデモに使用します。

SQL EXISTS - Sample Tables

次のステートメントは、少なくとも1人の扶養家族がいるすべての従業員を見つけます。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
WHERE
    EXISTS( SELECT 
            1
        FROM
            dependents
        WHERE
            dependents.employee_id = employees.employee_id);
Code language: SQL (Structured Query Language) (sql)
SQL EXISTS example

サブクエリは相関しています。employeesテーブルの各行について、サブクエリはdependentsテーブルに対応する行があるかどうかをチェックします。ある場合は、サブクエリは1を返し、外部クエリはemployeesテーブルの現在の行を含めます。対応する行がない場合、サブクエリは行を返さず、外部クエリは結果セットにemployeesテーブルの現在の行を含めません。

SQL NOT EXISTS

EXISTS演算子を否定するには、次のようにNOT演算子を使用します。

NOT EXISTS (subquery)
Code language: SQL (Structured Query Language) (sql)

たとえば、次のクエリは、扶養家族がいない従業員を見つけます。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
WHERE
    NOT EXISTS( SELECT 
            1
        FROM
            dependents
        WHERE
            dependents.employee_id = employees.employee_id);
Code language: SQL (Structured Query Language) (sql)

次のスクリーンショットは結果を示しています。

SQL NOT EXISTS example

SQL EXISTSとNULL

サブクエリがNULLを返す場合でも、EXISTS演算子は結果セットを返します。これは、EXISTS演算子がサブクエリによって返される行の存在のみをチェックするためです。行がNULLであるかどうかに関係ありません。

次の例では、サブクエリはNULLを返しますが、EXISTS演算子はtrueと評価されます。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
WHERE
    EXISTS( SELECT NULL)
ORDER BY first_name , last_name;    
Code language: SQL (Structured Query Language) (sql)

クエリはemployeesテーブルのすべての行を返します。

このチュートリアルでは、サブクエリによって返される行の存在をテストするためにSQL EXISTS演算子を使用する方法を学習しました。

このチュートリアルは役に立ちましたか?