📚 目录
🛠️ 概述
在 PostgreSQL 中,NULL
是一个特殊的标记,用于表示缺失、未知或不适用的数据。NULL
不等同于空字符串、零或任何其他值。它是一个独立的概念,用于表示某个字段没有值或该值尚未定义。处理 NULL
值时需要特别注意,尤其是在进行比较、计算和聚合操作时。
📝 NULL
值的定义
NULL
用于表示“没有值”或“值未知”。在 PostgreSQL 中,NULL
可以存储在任何数据类型的列中。
- 空值:一个字段包含
NULL
,意味着这个字段的数据是缺失的或不适用的,而不是空字符串或者零。 示例:INSERT INTO employees (name, department) VALUES ('John Doe', NULL);
上面的例子中,department
字段为NULL
,意味着John Doe
没有指定部门。
📝 NULL
与空字符串
尽管 NULL
和空字符串看起来可能相似,但它们是不同的:
NULL
:表示缺失或未知的值。- 空字符串:是一个有效的值,表示字段包含一个长度为零的字符串。
例如,在数据库查询中,NULL
和空字符串是不能互换的:
-- 这是一个NULL值
SELECT * FROM employees WHERE department IS NULL;
-- 这是一个空字符串
SELECT * FROM employees WHERE department = '';
📝 使用 IS NULL
和 IS NOT NULL
在 SQL 查询中,不能使用常规的比较运算符(如 =
或 !=
)来直接与 NULL
进行比较。相反,应该使用 IS NULL
或 IS NOT NULL
来检查字段是否为 NULL
。
示例(查找部门为空的员工):
SELECT * FROM employees WHERE department IS NULL;
示例(查找部门不为空的员工):
SELECT * FROM employees WHERE department IS NOT NULL;
📝 NULL
值与逻辑运算符
NULL
值在逻辑运算中会影响结果。逻辑运算符(如 AND
、OR
)和比较运算符(如 =
, !=
)与 NULL
一起使用时,结果会返回 UNKNOWN
,而不是 TRUE
或 FALSE
。
示例:
SELECT * FROM employees WHERE department = NULL;
上面的查询不会返回任何结果,因为 NULL
与任何值的比较会返回 UNKNOWN
。正确的查询方式是使用 IS NULL
:
SELECT * FROM employees WHERE department IS NULL;
📝 NULL
值与聚合函数
在 PostgreSQL 中,聚合函数(如 COUNT
、AVG
、SUM
)会自动忽略 NULL
值。例如,COUNT
只会计数非 NULL
的行,而 AVG
和 SUM
会忽略包含 NULL
的行。
示例(计算非空部门的员工数量):
SELECT COUNT(department) FROM employees;
该查询将返回 department
列中所有非 NULL
的员工数量。
如果你希望将 NULL
值也计入在内,可以使用 COUNT(*)
,它会计算表中的所有行,包括 NULL
值:
SELECT COUNT(*) FROM employees;
📝 COALESCE
和 NULLIF
函数
COALESCE
:COALESCE
函数返回其参数中的第一个非NULL
值。如果所有参数都是NULL
,则返回NULL
。 示例(返回非空值):SELECT COALESCE(department, 'Unknown') FROM employees;
该查询将返回department
列的值,如果是NULL
,则返回'Unknown'
。NULLIF
:NULLIF
函数比较两个表达式,如果它们相等,则返回NULL
,否则返回第一个表达式的值。 示例(避免除零错误):SELECT NULLIF(salary, 0) FROM employees;
如果salary
为0
,则返回NULL
;否则返回salary
的实际值。
📘 参考资料
- PostgreSQL 官方文档:NULL 值
- 更多 PostgreSQL 数据处理技巧整理自:www.52kanjuqing.com
发表回复