sql 中 is null 用法_sql 中 is null 判断空值方法

sql 中不能用 = NULL 判断空值,因为 null 表示未知,不等于任何值,包括自身;1. 正确判断空值应使用 is null,如 select * from users where email is null;2. 常见场景包括 left join 后查找无匹配记录,如 where o.user_id is null;3. 可与 coalesce 配合替换 null 值,如显示“无邮箱”;4. 注意 is not null 用于判断非空,字段默认值为空字符串时需用 = ” 判断,部分数据库处理 null 和空字符串不同,需注意区分;5. is null 查询可能效率较低,尤其大表,可考虑索引优化。

sql 中 is null 用法_sql 中 is null 判断空值方法

在 SQL 查询中,判断某个字段是否为空值时,不能直接使用等于号(=)来判断 NULL。因为 NULL 表示的是“未知”或“不存在”的值,它不等于任何值,包括它自己。所以要用 IS NULL 来准确判断空值。

sql 中 is null 用法_sql 中 is null 判断空值方法


为什么不能用 = NULL?

很多人刚开始写 SQL 的时候会误以为可以这样写:

SELECT * FROM users WHERE email = NULL;

但这样是查不出任何结果的。
SQL 中规定,NULL 和任何值做比较都会返回 UNKNOWN,而不是 TRUE 或 FALSE。因此,正确的写法必须是:

sql 中 is null 用法_sql 中 is null 判断空值方法

SELECT * FROM users WHERE email IS NULL;

这样才能正确筛选出 email 字段为空的数据。


常见使用场景

IS NULL 在实际开发中非常常见,特别是在处理外键、左连接(LEFT JOIN)等查询时,经常会用来查找没有匹配数据的记录。

sql 中 is null 用法_sql 中 is null 判断空值方法

比如你有两个表:用户表 users 和订单表 orders,你想找出那些没有下过订单的用户:

SELECT u.name FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE o.user_id IS NULL;

这条语句的意思就是:“找出那些在订单表中没有对应记录的用户”。


与 COALESCE 配合使用的小技巧

有时候你可能希望把 NULL 值替换成一个默认值,这时候可以用 COALESCE 函数结合 IS NULL 判断一起使用。

例如:

SELECT name, COALESCE(email, '无邮箱') AS email FROM users WHERE email IS NULL;

上面这段 SQL 的作用是:

  • 把 email 为 NULL 的显示成“无邮箱”
  • 同时只显示这些空值的记录

这在生成报表或者展示层处理时非常实用。


注意点和小建议

  • IS NOT NULL 是 IS NULL 的反向判断,用于筛选非空值。
  • 如果字段设置了默认值(如 default ”),那它就不是 NULL,而是空字符串,此时需要用 WHERE field = ” 来判断。
  • 某些数据库系统对 NULL 和空字符串的处理不同,要注意区分。
  • 在索引优化方面,IS NULL 查询有时效率较低,尤其是大表,可以考虑配合索引或调整设计。

基本上就这些。IS NULL 看起来简单,但在实际查询中非常关键,用错了就会漏掉数据或者查不出想要的结果。只要记住一点:永远不要用 = NULL,而要用 IS NULL,就能避免很多坑。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享