当前位置: 首页 > news >正文

SQL中的NULL陷阱:为何=永远查不到空值

在 SQL 的三值逻辑里,NULL 表示“未知值”,任何与未知值的比较结果仍然是未知(UNKNOWN),而查询只保留结果为 TRUE 的行,因此 =、<、>、LIKE 等常规运算符“遇 NULL 就消失”,永远得不到 TRUE。


  1. 三值逻辑(TRUE / FALSE / UNKNOWN)

SQL 的布尔体系不是二值,而是三值:

表达式结果说明
5 = 5TRUE确定相等
5 = 6FALSE确定不等
5 = NULLUNKNOWN不知道 5 与“未知”是否相等
NULL = NULLUNKNOWN两个未知值是否相等?仍是未知
NULL LIKE ‘%x’UNKNOWN同样未知
NULL > 3UNKNOWN未知值与 3 的大小关系未知

WHERE 子句只保留 TRUE 的行;UNKNOWN 被当作 FALSE 丢弃。
因此

SELECTWHERE col = NULL

永远返回 0 行,因为没有任何行能使条件为 TRUE。


  1. 为什么 “=” 不能替代 IS NULL

“=” 是普通比较运算符,遵循上面的三值逻辑。
IS NULL 是 SQL 提供的特殊谓词,它直接检查“是否为缺失值”,返回 TRUE 或 FALSE,不会产生 UNKNOWN
换句话说:

表达式结果
col IS NULLTRUE 或 FALSE
col = NULL永远是 UNKNOWN → 被过滤掉

因此

WHERE col = NULL        -- 语法合法,但逻辑错误

不会报错,也永远查不到数据。


  1. 为什么 LIKE、>、<、<> 同样失效

它们都是比较类运算符,只要操作符两边出现 NULL,结果就退化为 UNKNOWN,于是行被丢弃。
例子:

-- 假设 tel 里有 NULL 值
WHERE tel LIKE '%5'   -- NULL LIKE '%5'  → UNKNOWN  → 被过滤
WHERE tel > '700'     -- NULL > '700'   → UNKNOWN  → 被过滤

  1. 唯一正确的做法

  • 判断是 NULL:
    WHERE col IS NULL
    
  • 判断非 NULL:
    WHERE col IS NOT NULL
    

  1. 小结口诀

NULL 遇运算符,结果全失踪;
想抓 NULL,只能用 IS,不能用 =。

http://www.dtcms.com/a/594318.html

相关文章:

  • 厦门市网站建设软件开发公司营销网站seo推广
  • JDBC模板技术
  • 万网网站后台登陆做网站哪个部分
  • 11月10日学习总结--numpy的基本操作
  • 快速搭建一个 GitHub 开源项目导航网站,提供便捷的信息抓取、智能摘要、分类管理功能
  • 网站数据表怎么做网络推广引流方式
  • 【Rocky基础】——用户管理
  • 免费下载建筑图纸的网站wordpress子分页
  • 数据结构简明教程(李春葆版)课后习题答案
  • 做app网站公司名称如何网络推广新产品
  • CSGHub v1.12.0开源版本更新
  • 上海网站建设报价自建网站怎么做推广
  • Vue Router (编程式导航)
  • 特斯拉 Tesla 面试经验分享|流程全解析 + 技术细节 + 面试感受
  • .net网站开发面试网站平台定制开发
  • 网站制作公司咨询工作内容个人做网站可以盈利么
  • 【Unity】MMORPG游戏开发(十)断线恢复
  • 深圳app开发公司哪家服务好网站建设丶seo优化
  • C#/.NET/.NET Core技术前沿周刊 | 第 期(年.-.)
  • 手机网站标准自助建站系统哪个好用
  • 科技赋能文博传播 众趣科技引领数字博物馆虚拟展厅新生态
  • 科技驱动服务升级 榕树钱小乐的创新发展之路
  • 如何系统提升英文科技文献阅读能力:方法、工具与 30 天训练计划
  • 网站开发费用摊销时间深圳 网站公司
  • 网站建设案例方案做ppt卖给网站
  • 银行App关停潮下的物联网破局:从“数量冗余“到“智慧集约“
  • 文献分享日报15
  • 为什么最近好多网站维护南通市网站
  • 西亚网站建设科技江西省建设监理协会网站
  • kubernetes的包的管理--helm