在 PostgreSQL 中,“空值”通常指 NULL,表示“未知 / 不存在的值”,而不是空字符串 '' 或 0。下面从含义、判断、处理、运算、查询、函数几个方面系统说明。
NULL ≠ ''(空字符串)NULL ≠ 0NULL 与任何值比较结果都是 未知(unknown),不是 true 也不是 falseSELECT NULL = NULL; -- NULL
SELECT NULL IS NULL; -- true
❌ 错误写法:
WHERE col = NULL
✅ 正确写法:
WHERE col IS NULL
WHERE col IS NOT NULL
返回第一个非 NULL 的值
SELECT COALESCE(phone, '无电话')
FROM user;
SELECT COALESCE(a, b, c, '默认值');
✅ 常用于:防止 NULL 参与运算
当两个值相等时返回 NULL
SELECT NULLIF(score, 0);
-- 如果 score = 0,返回 NULL
常用于避免除零错误:
SELECT amount / NULLIF(total, 0)
FROM orders;
SELECT
CASE
WHEN col IS NULL THEN '缺失'
ELSE col
END
FROM t;
SELECT 1 + NULL; -- NULL
SELECT 'a' || NULL; -- NULL(注意!)
✅ 字符串拼接安全写法:
SELECT 'a' || COALESCE(NULL, '');
COUNT(*):统计所有行COUNT(col):忽略 NULLSUM / AVG / MAX / MIN:自动忽略 NULLSELECT COUNT(*), COUNT(age) FROM user;
默认规则:
ASC:NULL 排在最后DESC:NULL 排在最前自定义:
ORDER BY col NULLS FIRST;
ORDER BY col NULLS LAST;
CREATE TABLE t (
id SERIAL,
code TEXT UNIQUE
);
✅ 允许多个 NULL(PostgreSQL 特性)
CREATE INDEX idx_col ON t(col);
-- 默认不包含 NULL
包含 NULL:
CREATE INDEX idx_col ON t(col) WHERE col IS NOT NULL;
| 场景 | 建议 |
|---|---|
| 判断空 | 用 IS NULL |
| 计算 | 用 COALESCE |
| 除零 | 用 NULLIF |
| 拼接 | 用 COALESCE(..., '') |
| 排序 | 明确 NULLS FIRST/LAST |
如果你有具体业务场景(比如报表、导入数据、JSON、关联查询),可以告诉我,我给你写针对性 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。