WHERE 子句
WHERE
子句允许过滤来自 FROM 子句的 SELECT
数据。
如果存在 WHERE
子句,它必须包含一个表达式,其类型为 UInt8
。这通常是包含比较和逻辑运算符的表达式。此表达式求值为 0
的行将从后续转换或结果中排除。
WHERE
表达式的评估取决于是否可以使用索引和分区裁剪,如果底层表引擎支持这些功能。
如果您需要测试一个值是否为 NULL,请使用 IS NULL 和 IS NOT NULL 运算符或 isNull 和 isNotNull 函数。否则,包含 NULL
的表达式永远不会通过。
示例
要在 numbers 表上查找 3 的倍数且大于 10 的数字,请执行以下查询
SELECT number FROM numbers(20) WHERE (number > 10) AND (number % 3 == 0);
结果
┌─number─┐
│ 12 │
│ 15 │
│ 18 │
└────────┘
包含 NULL
值的查询
CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE=MergeTree() ORDER BY x;
INSERT INTO t_null VALUES (1, NULL), (2, 3);
SELECT * FROM t_null WHERE y IS NULL;
SELECT * FROM t_null WHERE y != 0;
结果
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
└───┴──────┘
┌─x─┬─y─┐
│ 2 │ 3 │
└───┴───┘