WHERE 句を使用すると、SELECT の FROM 句から取得されるデータをフィルタリングできます。
WHERE 句がある場合は、その後に UInt8 型の式が続く必要があります。
この式が 0 と評価される行は、それ以降の変換処理や結果から除外されます。
WHERE 句に続く式では、多くの場合、比較 や 論理演算子、あるいは多数の通常の関数のいずれかが使用されます。
基盤となるテーブルエンジンが対応している場合、WHERE 式は索引やパーティションプルーニングを利用できるように評価されます。
PREWHERE
PREWHERE と呼ばれるフィルタリング最適化もあります。
Prewhere は、フィルタリングをより効率的に適用するための最適化です。
PREWHERE 句が明示的に指定されていない場合でも、これはデフォルトで有効になっています。NULL の判定
値が NULL かどうかを調べる必要がある場合は、次を使用します。
IS NULLまたはisNullIS NOT NULLまたはisNotNull
NULL を含む式は決して条件を通過しません。
論理演算子でデータを絞り込む
複数の条件を組み合わせるには、WHERE 句とあわせて次の論理関数を使用できます。
条件として UInt8 カラムを使用する
ClickHouse では、UInt8 カラムをブール条件として直接使用でき、0 は false、0 以外の値 (通常は 1) は true を表します。
その例を以下のセクションに示します。
比較演算子の使用
次の比較演算子を使用できます。パターンマッチングと条件式
比較演算子に加えて、WHERE句ではパターンマッチングと条件式も使用できます。
使用例については、「パターンマッチングと条件式」を参照してください。
リテラル、カラム、またはサブクエリを含む式
WHERE 句の後に続く式には、リテラル、カラム、またはサブクエリを含めることもできます。サブクエリは、条件で使用される値を返す、ネストされた SELECT ステートメントです。
複雑な条件では、リテラル、カラム、サブクエリを組み合わせて使用できます。
例
NULL の判定
NULL 値を含むクエリ:
論理演算子を使用したデータのフィルタリング
以下のテーブルとデータがあるとします。AND - 両方の条件を満たす必要があります:
OR - 少なくとも1つの条件が真である必要があります:
NOT - 条件を否定する:
XOR - ちょうど1つの条件だけが真である必要があります (両方は不可) :
AND, OR, NOT, XOR) は一般に読みやすいですが、複雑な式や動的なクエリを組み立てる場合には、関数構文が便利なこともあります。
UInt8カラムを条件として使用する
前の例のテーブルでは、カラム名をそのまま条件として使用できます。比較演算子の使用
以下の例では、上記の例で使用したテーブルとデータを用います。簡潔にするため、結果は省略しています。 1. true との明示的な等値比較 (= 1 または = true) :
= 0 または = false) :
!= 0 または != false) :
IN 演算子の使用:
以下の例では、(1, true) は Tuple 型です。
パターンマッチングと条件式
以下の例では、上記の例で使用したテーブルとデータを使います。簡潔さのため、結果は省略します。LIKEの例
ILIKEの例
SIMILAR TO の例
LIKE とは異なり、SIMILAR TO のパターンでは正規表現のメタ文字 |、*、+、?、{、}、(、)、[、] も使用できます。また、LIKE と同様に、パターンは値全体と一致する必要があります。
ESCAPE 句を使用すると、任意のエスケープ文字を指定できます。この句は LIKE、ILIKE、NOT LIKE、NOT ILIKE、NOT SIMILAR TO でも使用できます:
SIMILAR TO 演算子のドキュメントを参照してください。