NULL 值
NULL 值是 SQL 中用于表示数据缺失的特殊值。任意类型的列都可以包含 NULL 值。从逻辑上看,NULL 可理解为“该字段的值未知”。
NULL 可以插入到任何未声明 NOT NULL 约束的字段中:
CREATE TABLE integers (i INTEGER);
INSERT INTO integers VALUES (NULL);
NULL 在查询的许多部分以及很多函数中都具有特殊语义:
任何与
NULL的比较都会返回NULL,包括NULL = NULL。
你可以使用 IS NOT DISTINCT FROM 进行“将 NULL 视为相等”的等值比较。使用 IS (NOT) NULL 来检查一个值是否为 NULL。
SELECT NULL = NULL;
NULL
SELECT NULL IS NOT DISTINCT FROM NULL;
true
SELECT NULL IS NULL;
true
NULL 与函数
函数的输入参数若为 NULL,通常会返回 NULL。
SELECT cos(NULL);
NULL
coalesce 函数是一个例外:它可以接受任意数量的参数,并在每一行返回第一个非 NULL 参数。若所有参数都为 NULL,coalesce 也会返回 NULL。
SELECT coalesce(NULL, NULL, 1);
1
SELECT coalesce(10, 20);
10
SELECT coalesce(NULL, NULL);
NULL
ifnull 函数是 coalesce 的双参数版本。
SELECT ifnull(NULL, 'default_string');
default_string
SELECT ifnull(1, 'default_string');
1
NULL 与 AND / OR
NULL 与 AND、OR 一起使用时具有特殊行为。
详情请参见布尔类型文档。
NULL 与 IN / NOT IN
... IN ⟨包含 NULL 的集合⟩ 与 ... IN ⟨不包含 NULL 的集合⟩ 的行为不同。
详情请参见IN 文档。
NULL 与聚合函数
在大多数聚合函数中,NULL 值会被忽略。
不会忽略 NULL 值的聚合函数包括:first、last、list 和 array_agg。要在这些聚合函数中排除 NULL,可以使用 FILTER 子句。
CREATE TABLE integers (i INTEGER);
INSERT INTO integers VALUES (1), (10), (NULL);
SELECT min(i) FROM integers;
1
SELECT max(i) FROM integers;
10