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

NULL の判定

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

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

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

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

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

比較演算子の使用

次の比較演算子を使用できます。
演算子関数説明
a = bequals(a, b)等しいprice = 100
a == bequals(a, b)等しい (別の構文)price == 100
a != bnotEquals(a, b)等しくないcategory != 'Electronics'
a <> bnotEquals(a, b)等しくない (別の構文)category <> 'Electronics'
a < bless(a, b)より小さいprice < 200
a <= blessOrEquals(a, b)以下price <= 200
a > bgreater(a, b)より大きいprice > 500
a >= bgreaterOrEquals(a, b)以上price >= 500
a LIKE slike(a, b)パターンマッチング (大文字と小文字を区別)name LIKE '%top%'
a NOT LIKE snotLike(a, b)パターンに一致しない (大文字と小文字を区別)name NOT LIKE '%top%'
a ILIKE silike(a, b)パターンマッチング (大文字と小文字を区別しない)name ILIKE '%LAPTOP%'
a BETWEEN b AND ca >= b AND a <= c範囲チェック (両端を含む)price BETWEEN 100 AND 500
a NOT BETWEEN b AND ca < b OR a > c範囲外のチェックprice NOT BETWEEN 100 AND 500

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

比較演算子に加えて、WHERE句ではパターンマッチングと条件式も使用できます。
機能構文大文字と小文字の区別パフォーマンス適した用途
LIKEcol LIKE '%pattern%'はい高速大文字と小文字を区別するパターンマッチング
ILIKEcol ILIKE '%pattern%'いいえ低速大文字と小文字を区別しない検索
if()if(cond, a, b)該当なし高速単純な二者択一条件
multiIf()multiIf(c1, r1, c2, r2, def)該当なし高速複数の条件
CASECASE WHEN ... THEN ... END該当なし高速SQL標準の条件ロジック
使用例については、「パターンマッチングと条件式」を参照してください。

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

WHERE 句の後に続く式には、リテラル、カラム、またはサブクエリを含めることもできます。サブクエリは、条件で使用される値を返す、ネストされた SELECT ステートメントです。
TypeDefinitionEvaluationPerformanceExample
Literal固定の定数値クエリ記述時最速WHERE price > 100
Columnテーブルデータへの参照行ごと高速WHERE price > cost
Subqueryネストされた SELECTクエリ実行時状況によるWHERE id IN (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年7月2日