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