在mysql数据库中,NULL代表字段没有值,和空字符串、0等值是完全不同的概念,因此判断字段是否为NULL不能直接使用等号或者不等号,需要使用专门的语法和函数来实现。

NULL判断的基础语法
IS NULL 判断字段为NULL
当需要查询某个字段值为NULL的记录时,要使用IS NULL语法,示例如下:
-- 查询user表中email字段为NULL的所有用户记录 SELECT * FROM user WHERE email IS NULL;
IS NOT NULL 判断字段不为NULL
如果需要查询字段值不为NULL的记录,使用IS NOT NULL语法:
-- 查询user表中email字段不为NULL的所有用户记录 SELECT * FROM user WHERE email IS NOT NULL;
错误判断方式说明
很多新手会尝试用等号判断NULL,比如写WHERE email = NULL,这种写法在mysql中不会报错,但永远无法匹配到任何记录,因为NULL和任何值(包括NULL本身)用等号比较的结果都是NULL,也就是假。同样WHERE email != NULL也无法得到正确结果,必须使用IS NULL或者IS NOT NULL。
常用NULL处理函数
IFNULL函数
IFNULL函数可以接收两个参数,第一个参数是待判断的字段,第二个参数是当字段为NULL时的替代值,语法为IFNULL(expr1, expr2):
-- 查询用户信息,如果email为NULL则显示'未填写' SELECT id, username, IFNULL(email, '未填写') AS user_email FROM user;
COALESCE函数
COALESCE函数可以接收多个参数,返回参数列表中第一个不为NULL的值,比IFNULL更灵活:
-- 优先取email,email为NULL则取phone,都为NULL则显示'无联系方式' SELECT id, username, COALESCE(email, phone, '无联系方式') AS contact FROM user;
实际业务场景示例
假设有一个订单表order_info,其中cancel_time字段表示订单取消时间,为NULL代表订单未取消,现在需要统计未取消的订单数量:
-- 统计未取消的订单总数 SELECT COUNT(*) AS un_cancel_order_count FROM order_info WHERE cancel_time IS NULL;
如果需要查询所有订单,同时显示订单状态,未取消的显示为进行中,已取消的显示为已取消:
-- 查询订单并转换状态显示
SELECT
order_id,
order_name,
IFNULL(
CASE WHEN cancel_time IS NOT NULL THEN '已取消' END,
'进行中'
) AS order_status
FROM order_info;
注意事项
- NULL和空字符串不同,空字符串是有效的值,判断空字符串要用
WHERE field = '',不能用IS NULL。 - 在聚合函数中,比如COUNT(column),不会统计该字段为NULL的记录,COUNT(*)会统计所有记录。
- 排序时,NULL值默认会被排在最前面,如果需要调整排序规则,可以用
ORDER BY field IS NULL, field把非NULL值排在前面。
mysqlNULL判断IS_NULLIS_NOT_NULL数据查询修改时间:2026-07-11 10:57:30