サブクエリ演算子

このトピックでは、Snowflakeでサポートされているサブクエリ演算子に関するリファレンス情報を提供します。サブクエリは、別のクエリ内のクエリです。

このトピックの内容:

ALL / ANY

ALL および ANY キーワードを使用して、サブクエリ(複数の行を返す可能性あり)によって生成された値に比較演算子を適用できます。

構文

<expr> comparisonOperator { ALL | ANY} ( <query> )

条件:

comparisonOperator ::=
  { = | != | > | >= | < | <= }

使用上の注意

  • 式は、演算子とサブクエリが返す各値と比較されます。

    • ANY が指定されている場合、サブクエリのいずれかの行が条件を満たせば結果は TRUE になり、そうでなければ FALSEを返します。

    • ALL が指定されている場合、サブクエリのすべての行が条件を満たす場合、結果は TRUE になり、そうでない場合は FALSEを返します。

  • ANY/ALL サブクエリは現在、 WHERE 句でのみサポートされています。

  • ANY/ALL サブクエリは、 OR 演算子の引数として使用できません。

  • サブクエリには、 SELECT リストに1つのアイテムのみが含まれている必要があります。

!= ALL サブクエリを使用して、従業員のいない部門を見つけます。

SELECT department_id
FROM departments d
WHERE d.department_id != ALL (SELECT e.department_id
                              FROM employees e);

[ NOT ] EXISTS

EXISTS サブクエリは、 WHERE または HAVING 句、またはブール式を操作する任意の関数に表示できるブール式です。

  • サブクエリによって行が生成されると、 EXISTS 式は TRUE と評価されます。

  • サブクエリによって行が生成されない場合、 NOT EXISTS 式は TRUE と評価されます。

構文

[ NOT ] EXISTS ( <query> )

使用上の注意

  • 現在、相関 EXISTS サブクエリは WHERE 句でのみサポートされています。

  • 相関する EXISTS サブクエリは、 OR 演算子の引数として表示できません。

  • 相関関係のない EXISTS サブクエリは、ブール式が許可されるすべての場所でサポートされます。

相関のある NOT EXISTS サブクエリを使用して、従業員のいない部門を見つけます。

SELECT department_id
FROM departments d
WHERE NOT EXISTS (SELECT 1
                  FROM employees e
                  WHERE e.department_id = d.department_id);

[ NOT ] IN

IN および NOT IN 演算子は、サブクエリによって返される値に式が含まれるかどうかを確認します。

構文

<expr> [ NOT ] IN ( <query> )

使用上の注意

  • IN は、 = ANY の簡略形であり、 ANY サブクエリと同じ制限に従います。

  • NOT IN は、 != ALL の簡略形であり、 ALL サブクエリと同じ制限に従います。

!= ALL サブクエリの例と同等の NOT IN サブクエリを使用します(このトピックに前述)。

SELECT department_id
FROM departments d
WHERE d.department_id NOT IN (SELECT e.department_id
                              FROM employees e);