⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
NULL Values

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 的参数。如果所有参数都是 NULLcoalesce 也会返回 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 和连接词

NULL 值在 AND/OR 连接中有特殊的语义。关于三元逻辑真值表,请参阅 Boolean Type documentation

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