如何查出字段为空的数据
在日常开发中,经常会遇到需要找出某些字段没有值的情况。比如用户注册时漏填了手机号,或者商品信息里缺少价格。这时候就得用 SQL 去筛选“空”的记录。
注意,“空”在数据库里有两种情况:一种是 NULL,另一种是空字符串('')。它们不一样,处理方式也不同。
查询 NULL 值的记录
如果某个字段值为 NULL,不能用等号判断。比如下面这个写法查不出来:
SELECT * FROM users WHERE phone = NULL;正确做法是使用 IS NULL:
SELECT * FROM users WHERE phone IS NULL;这条语句会返回所有手机号为 NULL 的用户。
查询空字符串的记录
有些表设计会用空字符串代替 NULL,这时就得用等号判断:
SELECT * FROM users WHERE phone = '';这条语句找到的是手机号被填成“空”的记录,虽然看着像没填,但在数据库里它不是 NULL。
同时查 NULL 和空字符串
为了保险起见,有时需要把两种“空”都找出来。可以用 OR 连接:
SELECT * FROM users WHERE phone IS NULL OR phone = '';这样不管是 NULL 还是空字符串,都会被筛选出来。
使用 COALESCE 简化判断
如果想让查询更简洁,可以用 COALESCE 函数把 NULL 转成空字符串再判断:
SELECT * FROM users WHERE COALESCE(phone, '') = '';COALESCE 会返回第一个非 NULL 的值,所以当 phone 是 NULL 时,就变成空字符串,和 '' 相等。
实际场景举例
假设你在做后台管理功能,需要找出哪些订单还没有填写收货地址。表叫 orders,字段是 address。可以直接写:
SELECT order_id, user_id FROM orders WHERE address IS NULL OR address = '';这样运营人员就能快速看到哪些订单信息不完整,及时跟进处理。
有时候前端传参不规范,也可能导致数据写入空值。定期跑这类查询,能帮助发现数据质量问题。