WHERE 子句允许你过滤 SELECT 的 FROM 子句返回的数据。
如果存在 WHERE 子句,其后必须跟一个 UInt8 类型的表达式。
表达式求值结果为 0 的行会被排除,不再参与后续转换或最终结果。
WHERE 子句后的表达式通常会结合比较运算符和逻辑运算符使用,或者使用众多常规函数中的一种。
如果底层表引擎支持,系统在计算 WHERE 表达式时会利用索引和分区裁剪能力。
PREWHERE还有一种名为
PREWHERE 的过滤优化。
Prewhere 是一种能更高效执行过滤的优化机制。
即使未显式指定 PREWHERE 子句,它默认也是启用的。判断 NULL
NULL,请使用:
否则,包含 NULL 的表达式将永远不会成立。
使用逻辑运算符过滤数据
WHERE 子句配合使用,以组合多个条件:
将 UInt8 列用作条件
UInt8 列可直接用作布尔条件,其中 0 表示 false,任何非零值 (通常为 1) 都表示 true。
相关示例见下文。
使用比较运算符
模式匹配和条件表达式
WHERE 子句中使用模式匹配和条件表达式。
用法示例请参见“模式匹配和条件表达式”。
包含字面量、列或子查询的表达式
WHERE 子句后面的表达式也可以包含字面量、列或子查询。子查询是嵌套的 SELECT 语句,会返回在条件中使用的值。
你可以在复杂条件中混合使用字面量、列和子查询:
示例
判断 NULL
NULL 值的查询:
使用逻辑运算符过滤数据
AND - 两个条件都必须成立:
OR - 至少有一个条件必须成立:
NOT - 对条件取反:
XOR - 必须恰好只有一个条件为真 (不能同时都为真) :
AND、OR、NOT、XOR) 通常更易于阅读,但在复杂表达式中或构建动态查询时,函数语法也很有用。
将 UInt8 列用作条件
使用比较运算符
= 1 或 = true) :
= 0 或 = false) :
!= 0 或 != false) :
IN 运算符:
在下面的示例中,(1, true) 是一个元组。