文章目录
- 1. 检查是否为 NULL
- 2. NULL 值与比较运算符
- 3. 在聚合函数中处理 NULL
- 4. 在 WHERE 子句中的复杂条件
- 注意事项
在 PostgreSQL 中处理 NULL 值需要特别注意,因为 NULL 表示"未知"或"不存在"的值,与普通值的行为不同。以下是几种处理 NULL 值的 SQL 条件写法:
1. 检查是否为 NULL
-- 使用 IS NULL 检查 NULL 值
SELECT * FROM table_name WHERE column_name IS NULL;-- 使用 IS NOT NULL 检查非 NULL 值
SELECT * FROM table_name WHERE column_name IS NOT NULL;
2. NULL 值与比较运算符
-- 以下写法不会返回任何行,因为 NULL 不能与任何值比较
SELECT * FROM table_name WHERE column_name = NULL; -- 错误写法
SELECT * FROM table_name WHERE column_name != NULL; -- 错误写法-- 正确写法是使用 IS NULL 或 IS NOT NULL
3. 在聚合函数中处理 NULL
-- COUNT 会忽略 NULL 值
SELECT COUNT(column_name) FROM table_name; -- 只计算非 NULL 值
SELECT COUNT(*) FROM table_name; -- 计算所有行,包括 NULL 值-- 其他聚合函数如 SUM, AVG 也会忽略 NULL 值
4. 在 WHERE 子句中的复杂条件
-- 查找值为 NULL 或满足特定条件的行
SELECT * FROM table_name
WHERE column_name IS NULL OR column_name = 'some_value';-- 查找值不为 NULL 且满足特定条件的行
SELECT * FROM table_name
WHERE column_name IS NOT NULL AND column_name LIKE 'A%';
注意事项
- NULL 不等于空字符串 ‘’,也不等于 0
- 任何与 NULL 的算术运算结果都是 NULL
- 在 UNIQUE 约束中,NULL 值被视为彼此不同(允许多个 NULL 值)
- 在 ORDER BY 中,NULL 值默认排在最后(可使用 NULLS FIRST/NULLS LAST 调整)