如何查询SQL中特定字段为空的记录?掌握IS NULL用法

来源:IT编程作者:本地能跑头衔:程序员
导读:本期聚焦于小伙伴创作的《如何查询SQL中特定字段为空的记录?掌握IS NULL用法》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何查询SQL中特定字段为空的记录?掌握IS NULL用法》有用,将其分享出去将是对创作者最好的鼓励。

在SQL数据库的实际使用中,我们经常会遇到某些字段没有存储有效数据的情况,这类值被称为空值。要准确筛选出这些字段为空的记录,需要掌握IS NULL的正确用法,避免常见的查询误区。

如何查询SQL中特定字段为空的记录?掌握IS NULL用法

为什么不能用等于号判断空值

SQL中的空值表示字段没有值,它不等于0,也不等于空字符串,更不是任何具体的数据。普通比较运算符比如等于号=是用来判断两个具体值是否相等的,空值无法和任何值进行比较,所以使用字段名 = NULL的写法永远不会返回匹配的结果。

我们可以通过下面的简单示例验证这个特性,先创建一张测试表并插入包含空值的测试数据:

-- 创建测试用户表
CREATE TABLE test_user (
    id INT PRIMARY KEY,
    user_name VARCHAR(50),
    email VARCHAR(100)
);

-- 插入测试数据,其中第二条记录的email字段为空
INSERT INTO test_user (id, user_name, email) VALUES (1, '张三', 'zhangsan@ipipp.com');
INSERT INTO test_user (id, user_name, email) VALUES (2, '李四', NULL);
INSERT INTO test_user (id, user_name, email) VALUES (3, '王五', 'wangwu@ipipp.com');

如果执行SELECT * FROM test_user WHERE email = NULL;,查询结果会返回空集,因为等于号无法判断空值。

IS NULL的基本语法

要判断字段是否为空,正确的语法是使用IS NULL,语法格式如下:

SELECT 列名1, 列名2, ... 
FROM 表名 
WHERE 字段名 IS NULL;

如果要查询字段不为空的记录,则使用IS NOT NULL,语法格式如下:

SELECT 列名1, 列名2, ... 
FROM 表名 
WHERE 字段名 IS NOT NULL;

实际查询示例

查询单字段为空的记录

我们基于上面的test_user表,查询所有邮箱为空的用户的id和用户名:

SELECT id, user_name 
FROM test_user 
WHERE email IS NULL;

执行上述语句后,会返回id为2、用户名为李四的记录,符合我们的预期。

查询多条件包含空值判断的记录

如果需要同时筛选多个条件,比如查询用户名为李四且邮箱为空的记录,可以这样写:

SELECT * 
FROM test_user 
WHERE user_name = '李四' AND email IS NULL;

结合其他运算符使用

IS NULL也可以和OR、IN等运算符结合使用,比如查询邮箱为空或者邮箱是特定地址的用户:

SELECT * 
FROM test_user 
WHERE email IS NULL OR email = 'zhangsan@ipipp.com';

使用IS NULL的注意事项

  • 不要混淆NULL和空字符串'',空字符串是一个具体的值,判断空字符串需要用字段名 = '',判断空值才用IS NULL
  • 不同数据库对空值的处理可能有细微差异,但IS NULL的语法是SQL标准语法,在主流的关系型数据库比如MySQL、PostgreSQL、SQL Server中都可以正常使用。
  • 如果需要对空值进行替换展示,可以结合COALESCE函数使用,比如SELECT id, user_name, COALESCE(email, '未填写') AS email FROM test_user;,这样空值的邮箱字段会显示为未填写。

常见误区总结

错误写法正确写法说明
WHERE email = NULLWHERE email IS NULL等于号无法判断空值
WHERE email != NULLWHERE email IS NOT NULL不等于号也无法判断空值
WHERE email IS '未填写'WHERE email IS NULLIS后面只能跟NULL或者NOT NULL

SQLIS_NULL空值查询数据库查询修改时间:2026-07-04 11:54:11

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。