メインコンテンツへスキップ
WHERE 句を使用すると、SELECTFROM 句から取得されるデータをフィルタリングできます。 WHERE 句がある場合は、その後に UInt8 型の式が続く必要があります。 この式が 0 と評価される行は、それ以降の変換処理や結果から除外されます。 WHERE 句に続く式では、多くの場合、比較論理演算子、あるいは多数の通常の関数のいずれかが使用されます。 基盤となるテーブルエンジンが対応している場合、WHERE 式は索引やパーティションプルーニングを利用できるように評価されます。
PREWHEREPREWHERE と呼ばれるフィルタリング最適化もあります。 Prewhere は、フィルタリングをより効率的に適用するための最適化です。 PREWHERE 句が明示的に指定されていない場合でも、これはデフォルトで有効になっています。

NULL の判定

値が NULL かどうかを調べる必要がある場合は、次を使用します。 それ以外の方法では、NULL を含む式は決して条件を通過しません。

論理演算子でデータを絞り込む

複数の条件を組み合わせるには、WHERE 句とあわせて次の論理関数を使用できます。

条件として UInt8 カラムを使用する

ClickHouse では、UInt8 カラムをブール条件として直接使用でき、0false、0 以外の値 (通常は 1) は true を表します。 その例を以下のセクションに示します。

比較演算子の使用

次の比較演算子を使用できます。

パターンマッチングと条件式

比較演算子に加えて、WHERE句ではパターンマッチングと条件式も使用できます。 使用例については、「パターンマッチングと条件式」を参照してください。

リテラル、カラム、またはサブクエリを含む式

WHERE 句の後に続く式には、リテラル、カラム、またはサブクエリを含めることもできます。サブクエリは、条件で使用される値を返す、ネストされた SELECT ステートメントです。 複雑な条件では、リテラル、カラム、サブクエリを組み合わせて使用できます。

NULL の判定

NULL 値を含むクエリ:

論理演算子を使用したデータのフィルタリング

以下のテーブルとデータがあるとします。
1. AND - 両方の条件を満たす必要があります:
2. OR - 少なくとも1つの条件が真である必要があります:
3. NOT - 条件を否定する:
4. XOR - ちょうど1つの条件だけが真である必要があります (両方は不可) :
5. 複数の演算子の組み合わせ:
6. 関数構文の使用:
SQLのキーワード構文 (AND, OR, NOT, XOR) は一般に読みやすいですが、複雑な式や動的なクエリを組み立てる場合には、関数構文が便利なこともあります。

UInt8カラムを条件として使用する

前の例のテーブルでは、カラム名をそのまま条件として使用できます。

比較演算子の使用

以下の例では、上記ので使用したテーブルとデータを用います。簡潔にするため、結果は省略しています。 1. true との明示的な等値比較 (= 1 または = true) :
2. false との明示的な等価比較 (= 0 または = false) :
3. 不等比較 (!= 0 または != false) :
4. 大なり:
5. 以下:
6. 他の条件と組み合わせる:
7. IN 演算子の使用: 以下の例では、(1, true)Tuple 型です。
これには、Arrayを使うこともできます:
8. 比較スタイルの混用:

パターンマッチングと条件式

以下の例では、上記ので使用したテーブルとデータを使います。簡潔さのため、結果は省略します。

LIKEの例

ILIKEの例

IFの例

multiIf の使用例

CASE の例

単純CASE:
検索CASE:
最終更新日 2026年6月19日