ClickHouse/docs/zh/sql-reference/statements/select/where.md
2023-03-03 10:35:07 +00:00

1.9 KiB
Raw Blame History

slug sidebar_label
/zh/sql-reference/statements/select/where WHERE

WHERE

WHERE 子句允许过滤来自SELECT的子句 FROM 的数据.

如果有一个 WHERE 子句,它必须包含一个表达式与 UInt8 类型。 这通常是一个带有比较和逻辑运算符的表达式。 表达式计算结果为0的行将被排除在在进一步的转换或结果之外。

如果基础表引擎支持,WHERE表达式会使用索引和分区进行剪枝。

:::note 有一个叫做过滤优化 prewhere 的东西. :::

如果需要测试一个 NULL 值,请使用 IS NULL and IS NOT NULL 运算符或 isNullisNotNull 函数。否则带有 NULL 的表达式永远不会通过。

示例

numbers table 表上执行下述语句以找到为3的倍数且大于10的数字 To find numbers that are multiples of 3 and are greater than 10 execute the following query on the :

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 │
└───┴───┘