⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
NULL 值

NULL 值是 SQL 中用于表示缺失数据的特殊值。任何类型的列都可以包含 NULL 值。从逻辑上讲,NULL 值可以被视为“该字段的值未知”。

任何没有 NOT NULL 限定符的字段都可以插入 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

NULLAND / OR

NULL 值在与 ANDOR 一起使用时具有特殊的行为。有关详细信息,请参阅布尔类型文档

NULLIN / NOT IN

... IN 包含 NULL 的内容 的行为与 ... IN 不含 NULL 的内容 不同。有关详细信息,请参阅 IN 文档

NULL 与聚合函数

大多数聚合函数会忽略 NULL 值。

不忽略 NULL 值的聚合函数包括:firstlastlistarray_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
© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南