NULL 在 SQL 中表示缺失、未知或不适用的数据值,它与空字符串或零值不同。SQL 对 NULL 有特殊的处理规则:
NULL 的基本特性
-
比较运算 :任何与 NULL 的比较都返回 UNKNOWN(既不是 TRUE 也不是 FALSE)
sqlSELECT * FROM table WHERE column = NULL; -- 不会返回任何行 SELECT * FROM table WHERE column IS NULL; -- 正确写法
-
逻辑运算:
-
NULL AND TRUE
= NULL -
NULL OR FALSE
= NULL -
NOT NULL
= NULL
-
函数中的 NULL 处理
-
聚合函数:
-
COUNT(column) 忽略 NULL 值
-
SUM(), AVG(), MAX(), MIN() 等也忽略 NULL
-
COUNT(*) 计算所有行,包括 NULL
-
-
算术运算 :任何包含 NULL 的算术运算结果都是 NULL
sqlSELECT 5 + NULL; -- 结果为 NULL
NULL 相关函数
-
IS NULL / IS NOT NULL :专门用于检查 NULL 值
sqlSELECT * FROM employees WHERE manager_id IS NULL;
-
COALESCE() :返回第一个非 NULL 值
sqlSELECT COALESCE(phone, email, 'N/A') FROM contacts;
-
NULLIF() :如果两个表达式相等则返回 NULL
sqlSELECT NULLIF(salary, 0) FROM employees; -- 如果 salary=0 则返回 NULL
-
NVL() / IFNULL()(数据库特定):
sql-- Oracle SELECT NVL(commission, 0) FROM employees; -- MySQL/SQLite SELECT IFNULL(commission, 0) FROM employees;
注意事项
-
在 UNIQUE 约束中,NULL 被视为不同的值(多个 NULL 是被允许的)
-
在 GROUP BY 中,所有 NULL 会被分到同一组
-
在 ORDER BY 中,NULL 默认被视为最小值(可以指定 NULLS FIRST/LAST 改变行为)
理解 NULL 的行为对于编写正确的 SQL 查询至关重要,因为 NULL 处理不当是许多查询错误的常见原因。