SQL如何检查字段是否为空?IS NULL与IS NOT NULL判断
SQL如何检查字段是否为空?IS NULL与IS NOT NULL判断

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
在数据库查询中,判断字段是否为空,可以说是每个开发者都会遇到的基本操作。但就是这个看似简单的操作,却藏着不少容易踩坑的细节。今天,我们就来彻底理清其中的门道。
IS NULL 和 IS NOT NULL 是唯一标准写法
开门见山,在SQL里检查一个字段是否为空,必须使用 IS NULL 或 IS NOT NULL。千万别用等号,比如 = NULL 或者 != NULL —— 这么写,查询结果永远会让你失望,因为它返回的是 UNKNOWN,最终被当作 false 处理,什么数据都查不到。
为什么会这样?根源在于SQL独特的“三值逻辑”(true/false/unknown)。这里的 NULL 代表的是“未知值”,它既不是空字符串,也不是数字零,而是一个特殊标记,压根不参与常规的比较运算。
WHERE col = NULL→ 永远匹配不上,哪怕这列全是 NULL 值。WHERE col IS NULL→ 这才是正确找出 NULL 值的姿势。WHERE col IS NOT NULL→ 能排除 NULL,但请注意:它不会过滤掉空字符串''或 0。
空字符串、零、空白字符 ≠ NULL,要分开处理
一个常见的误解是,以为用 IS NULL 就能一网打尽所有“看起来空”的数据。现实可没这么简单。下面这些值,在数据库眼里,都不是 NULL:
- 空字符串:
'' - 全是空格的字符串:
' ' - 数字零:
0(针对数值型字段) - 特殊日期如 '0000-00-00'(在MySQL的某些兼容模式下)
所以,如果你的业务需求是要把“缺失值”和“未填写”(空字符串)都找出来,那就得显式地补充条件:
WHERE col IS NULL OR col = '' OR TRIM(col) = ''
这里有个技术细节:TRIM() 函数在不同数据库中的支持度略有差异。PostgreSQL和MySQL原生支持,SQL Server通常用 RTRIM(LTRIM()) 组合,而Oracle也支持 TRIM()。另外,对于数值型字段,要不要加上 OR col = 0 可得三思,因为0很可能是一个完全合法的业务数值。
在 WHERE、JOIN、GROUP BY 中 NULL 的行为差异
NULL 的“古怪”脾气不仅影响简单的条件过滤,还会波及到表连接和分组聚合:
- JOIN 操作:使用
JOIN ON a.id = b.id时,如果连接键的任一方是 NULL,这一行记录就不会被关联上。原因还是那个:NULL = NULL的结果是 false。如果想实现“NULL 与 NULL 也算匹配”的逻辑,就得把条件改写为:ON (a.id = b.id) OR (a.id IS NULL AND b.id IS NULL)。 - GROUP BY:进行分组时,所有的 NULL 值会被归到同一组里。这一点是SQL标准行为,绝大多数数据库都遵循。
- ORDER BY:排序时,NULL 值的位置因数据库而异,有的默认排在最前(如PostgreSQL),有的默认放在最后(如MySQL)。如果想精确控制,可以用
ORDER BY col IS NULL, col这样的写法来显式指定。
用 COALESCE 或 CASE 预处理 NULL 更可控
直接使用 IS NULL 判断适合做条件过滤。但如果想在查询结果里,用一个统一的占位符(比如‘未知’)来替换掉 NULL,更优雅的做法是使用 COALESCE 函数:
SELECT COALESCE(name, '未知') AS name FROM users;
它比写一长串 CASE WHEN name IS NULL THEN '未知' ELSE name END 要简洁得多。不过得留个心眼:COALESCE 返回的是第一个非 NULL 表达式的数据类型,如果前后类型不一致,在某些数据库里可能会触发隐式转换,甚至报错(比如尝试把整数列和字符串 ‘N/A’ 合并时)。
遇到更复杂的逻辑,比如需要把 NULL、空字符串、有效值分开统计时,就别指望一个 IS NULL 能包打天下了。老老实实用 CASE 表达式配合多重判断,才是稳妥的选择。
说到底,在动手写SQL之前,最关键的一步是厘清业务上所谓的“空”到底指什么:是数据缺失(NULL)?是用户未填写(空字符串)?还是某个代表无效的默认值(比如0或‘1970-01-01’)?定义清楚了,再选择合适的判断组合。漏掉任何一种情况,都可能为后续的数据分析埋下偏差的种子。
相关攻略
松下电吹风插电不转?别急着扔,九成可能是这个原因 家里的松下电吹风插上电后毫无反应,风扇纹丝不动,很多人第一反应是电机烧了,维修价值不大。但事实恰恰相反,绝大多数情况下,问题并非出在核心电机上,而是前端的供电链路出现了物理性中断。根据松下官方售后技术手册以及多家授权维修中心近三年的故障统计数据,像E
家用吸尘器完全适合清洁地毯,但效果高度依赖吸头设计与动力配置 先说一个核心判断:用家用吸尘器清洁地毯,这事儿完全可行,但效果好坏,关键得看装备和手法。如今,主流品牌像小熊、追觅这些,早就为地毯场景优化了产品。它们普遍配备了电动滚刷、拍打震动模块或是专用平板吸头,目的很明确——就是要松动并吸走那些死死
按摩椅力度调小后依然有效,关键在于匹配个体身体状态与使用需求 现代中高端按摩椅普遍配备多级力度调节系统,但很多人心里犯嘀咕:力度调小了,是不是就变成隔靴搔痒,没什么实际作用了? 事实恰恰相反。实测数据显示,轻柔档位(比如30%—50%的输出强度)在缓解日常肩颈僵硬、改善浅层血液循环方面,有着明确的生
PoE交换机好坏,普通测线仪说了不算 想用普通网线测线仪来判断一台PoE交换机的好坏?这个想法很危险。原因很简单:普通测线仪只能干些基础活儿,比如看看网线通不通、线序对不对、有没有短路断路。但对于PoE交换机的核心能力——供电电压是否达标、输出功率稳不稳定、是否兼容最新的IEEE标准、带载后电压会不
运动耳机切换内存卡模式要配APP吗? 先说一个核心结论:这事儿,还真不用。绝大多数主流运动耳机,早就把切换功能“焊”在了硬件逻辑里,通过几个简单的物理按键组合就能一键搞定,全程丝滑,根本用不着打开手机APP。 你猜怎么着?比如南卡Runner Pro4,双击电源键;咏远Y12,也是双击电源键;塞那A
热门专题
热门推荐
《识质存在》中后期配装与打法全解析:从生存到精通 进入《识质存在》的中后期,战场环境陡然严峻。敌人的伤害与生存压力同步攀升,单纯的武器升级已不足以应对挑战。真正的战力构建,是一个系统工程,它涵盖了武器、道具、模块天赋与侵入节点的协同搭配。如果你正为如何配装而困惑,下面的攻略或许能为你指明方向。 一、
《黑袍纠察队》主演揭秘阿什莉隐藏的勇敢!她如何从傀儡CEO到副总统,注射五号化合物长出第二张脸,在祖国人阴影下求生。第五季剧情解析,点击查看! 在埃里克·克里普克打造的《黑袍纠察队》宇宙里,科尔比·米尼菲饰演的阿什莉·巴雷特,绝对算得上最让人过目不忘的角色之一。尽管她在沃特国际的企业和整治阶梯上步步
一路向西斩妖除魔 《遥遥西土》Steam好评如潮 最近Steam上杀出了一匹黑马:由法国独立工作室Evil Raptor开发的4人合作射击游戏《遥遥西土(Far Far West)》,一登陆抢先体验就收获了玩家“好评如潮”的顶级评价。看看数据就知道有多夸张:在超过2700条玩家评价中,好评率稳稳站在
探索Midnight Season 1最快地城排名:S-Tier Collegiate Calamity等攻略,优化刷本效率,提升装备和进度 开门见山地说,在《Midnight》第一赛季里,并非所有地城(Delves)的“性价比”都一样。有的流程紧凑,一路畅通无阻;有的则弯弯绕绕,耗时费力。为了帮你
SpringBoot2 7 x将logback升级到1 3 x以上版本的全过程解析 不少开发者在尝试将SpringBoot 2 7 x项目中的Logback升级到1 3 x或更高版本时,都会遇到一个典型的启动报错。这背后的原因其实很明确:SpringBoot 2 7 x默认依赖的是logback-c





