サブクエリ演算子

サブクエリ は、別のクエリ内のクエリです。サブクエリ演算子は、サブクエリによって生成された値に対する操作を実行します。

Snowflakeは、以下のサブクエリ演算子をサポートしています。

ALL / ANY

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

構文

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

条件:

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

使用上の注意

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

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

    • ANY が指定されていると、サブクエリのいずれかの行が条件を満たす場合は、結果が 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);
Copy

[ NOT ] EXISTS

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

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

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

構文

[ NOT ] EXISTS ( <query> )
Copy

使用上の注意

  • 現在、 相関する 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);
Copy

[ NOT ] IN

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

構文

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

使用上の注意

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

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

  • [NOT] IN は、サブクエリが関与しない式の演算子としても使用できます。詳細については、 [ NOT ] IN をご参照ください。

!= ALL サブクエリの例と同等の NOT IN サブクエリを使用し(このトピックに前述)、従業員がいない部門を見つけます。

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