在 ANSI SQL 中,**空值(NULL)**的处理有一套统一且严格的定义。理解 NULL 的核心在于:NULL 不是值,而是“未知 / 不存在”的标记。
下面按常见场景系统说明 ANSI SQL 如何处理空值。
NULL = NULL -- 结果为 Unknown(不是 TRUE)
NULL <> NULL -- 结果也是 Unknown
x = NULL -- 永远不是 TRUE
x <> NULL -- 永远不是 TRUE
✅ 正确判断 NULL 的方式:
x IS NULL
x IS NOT NULL
ANSI SQL 使用 三值逻辑(TRUE / FALSE / UNKNOWN)
| 表达式 | 结果 |
|---|---|
| TRUE AND UNKNOWN | UNKNOWN |
| FALSE AND UNKNOWN | FALSE |
| TRUE OR UNKNOWN | TRUE |
| FALSE OR UNKNOWN | UNKNOWN |
| NOT UNKNOWN | UNKNOWN |
✅ WHERE 子句中:
任何包含 NULL 的算术运算,结果都是 NULL:
1 + NULL -- NULL
10 * NULL -- NULL
NULL / 2 -- NULL
COUNT(*) -- 统计所有行(包括 NULL)
COUNT(col) -- 忽略 col 为 NULL 的行
SUM(col) -- 忽略 NULL
AVG(col) -- 忽略 NULL
MAX(col) -- 忽略 NULL
✅ NULL 不参与聚合计算
ANSI SQL 规定:
NULL 被视为 最小值ORDER BY col ASC -- NULL 在前
ORDER BY col DESC -- NULL 在后
⚠️ 不同数据库实现可能不同(如 Oracle / PostgreSQL / SQL Server)
CREATE TABLE t (
id INT UNIQUE
);
✅ 可插入多行 id IS NULL
COALESCE(col, 0)
NULLIF(col, 0)
CASE
WHEN col IS NULL THEN '未知'
ELSE '有值'
END
❌ 错误写法:
CASE
WHEN col = NULL THEN ...
END
x IN (1, 2, NULL)
x NOT IN (1, 2, NULL)
✅ 安全写法:
x NOT IN (1, 2)
AND x IS NOT NULL
✅ 记住这 6 条就够了:
IS NULL / IS NOT NULL如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。