正确处理NULL需用IS NULL/IS NOT NULL判断,COALESCE返回首个非空值,CASE实现条件替换,默认约束自动填充缺失值,核心是理解NULL代表未知而非空值或零。

在 SQL 查询中,NULL 表示“缺失值”或“未知值”,它不等于任何值(包括它自己)。处理 NULL 和默认值是数据查询中的常见需求。正确使用相关函数和逻辑判断,能有效避免结果偏差。
1. 判断和过滤 NULL 值
不能用 = 或 != 来判断 NULL,必须使用 IS NULL 或 IS NOT NULL。
- SELECT * FROM users WHERE email IS NULL; —— 查询 email 缺失的记录
- SELECT * FROM users WHERE name IS NOT NULL; —— 排除 name 为空的记录
2. 使用 COALESCE 设置默认值
COALESCE 函数返回第一个非 NULL 的表达式值,常用于替代 NULL 为默认值。
- SELECT COALESCE(phone, '未提供') AS phone FROM users; —— phone 为 NULL 时显示“未提供”
- SELECT COALESCE(discount, 0) * price AS final_discount FROM products; —— 将 NULL 折扣视为 0
3. 使用 CASE 处理复杂逻辑
当需要根据多种条件替换或判断 NULL 时,CASE 更灵活。
- SELECT name, CASE WHEN age IS NULL THEN '年龄保密' ELSE CAST(age AS VARCHAR) END AS age_display FROM users;
4. 插入或更新时设置默认值
表结构中可定义列的 DEFAULT 约束,INSERT 时不指定该列则自动填入默认值。
- CREATE TABLE logs ( id INT PRIMARY KEY, message TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
- INSERT INTO logs (id, message) VALUES (1, '系统启动'); —— created_at 自动填充当前时间
基本上就这些。合理利用 IS NULL、COALESCE、CASE 和 DEFAULT 约束,就能稳妥处理空值和默认值问题。关键是理解 NULL 不是“空字符串”也不是“0”,而是“未知”。










