カテゴリ:

クエリ構文

WHERE

WHERE 句は、 FROM 句の結果をフィルタリングします。

構文

SELECT ...
FROM ...
WHERE <predicate>
[ ... ]
述語

ブール式。式には、 ANDORNOT などの 論理演算子 を含めることができます。

使用上の注意

WHERE 句で結合します

  • 結合は、 WHERE 句に結合条件を含めることにより、 FROM 句での指定に加え、またはその代わりに、 WHERE 句で表現できます。

    次の2つの同義のクエリは、 FROM または WHERE 句で結合を表現する方法を示しています。

    SELECT c1, c2
    FROM t1 INNER JOIN t2
            ON c1 = c2
    ORDER BY 1,2;
    
    SELECT c1, c2
    FROM t1, t2
    WHERE c1 = c2
    ORDER BY 1,2;
    
  • WHERE 句の述語は、 FROM 句の後に評価されるかのように動作します(ただし、結果に影響しない場合、オプティマイザは述語を並べ替えることができます)。例えば、 WHERE 句の述語が FROM 句の外部結合に参加しているテーブルの列を参照する場合、結合から返された行(NULLs が埋め込まれる可能性があります)を操作します。

  • 外部結合は、 (+) 構文を使用して WHERE 句で指定できます。 (+) を使用して外部結合を指定するには、結合の NULL 拡張テーブルの列に WHERE 句の (+) の注釈を付けます。

    次の2つの同義のクエリは、外部結合を FROM 句または WHERE 句で表現する方法を示しています。

    SELECT c1, c2
    FROM t1 LEFT OUTER JOIN t2
            ON c1 = c2;
    
    SELECT c1, c2
    FROM t1, t2
    WHERE c1 = c2(+);
    

    注釈

    (+) 注釈を表示できる場所には多くの制限があります。 FROM 句の外部結合のほうが表現性に優れています。Snowflakeは、既にその表記法を使用しているコードを移植する場合にのみ (+) 表記法を使用することを推奨しています。新しいコードではその表記を避ける必要があります。

    制限事項は次のとおりです。

    • FULL OUTER JOIN を作成するために (+) 表記を使用することはできません。作成できるのは LEFT OUTER JOINRIGHT OUTER JOIN のみです。

以下に、 WHERE 句の簡単な使用例を示します。

SELECT * FROM invoices
  WHERE invoice_date < '2018-01-01';

SELECT * FROM invoices
  WHERE invoice_date < '2018-01-01' AND paid = False;

この例では、サブクエリを使用して、請求額が平均を下回るすべての請求書を表示します。

SELECT * FROM invoices
  WHERE amount < (SELECT AVG(amount) FROM invoices);