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

解析 SQL 中的 NULL 与比较操作:NULL 值与任何值的比较会返回 UNKNOWN

在 SQL 查询中,我们经常会遇到 NULL 值。NULL 值的行为与其他数据类型的值是不同的,尤其是在进行条件比较时。NULL 与其他值的比较结果是什么?

1. NULL 的特殊性:三值逻辑

首先,我们需要理解 SQL 中的三值逻辑(Three-Valued Logic)。与传统的布尔逻辑不同,SQL 处理 NULL 值时引入了一个额外的 “未知” 状态。SQL 中的三值逻辑有三种可能的结果:

  • TRUE(真)
  • FALSE(假)
  • UNKNOWN(未知)

这三种结果在 SQL 查询的执行中会产生不同的行为,尤其是在 WHERE 子句中的条件判断时。如果一个表达式的结果为 UNKNOWN,该行数据将被视为“不符合条件”,因此不会被选中。

2. NULL 与其他值比较时的行为

我们以这个例子来分析一下:

appCode IS NULL AND appCode != 'app_yyy'

这个条件看起来好像是在做一个简单的 NULL 检查和不等于 'app_yyy' 的判断。但是在 SQL 中,NULL 的比较并不是简单的。具体来说:

  • appCode IS NULL 用来检查 appCode 是否为 NULL,如果是 NULL,结果为 TRUE,否则为 FALSE
  • appCode != 'app_yyy' 用来判断 appCode 是否不等于 'app_yyy'。但是在 SQL 中,任何与 NULL 进行的比较都会返回 UNKNOWN,因为 NULL 代表的是“未知”的状态。换句话说,NULL != 'app_yyy' 的结果是 UNKNOWN,而不是 TRUEFALSE

3. SQL 中的 NULL 比较规则

SQL 的比较规则如下:

  • NULL 与任何非 NULL 值进行比较(例如 NULL = 'some_value'NULL != 'some_value')结果是 UNKNOWN
  • NULLNULL 的比较(例如 NULL = NULL)也返回 UNKNOWN,而不是 TRUE
  • 只有明确使用 IS NULLIS NOT NULL 来检查 NULL

所以,回到例子,appCode IS NULL 结果为 TRUE 时,appCode != 'app_yyy' 的结果是 UNKNOWN,这会使得整个条件变成 TRUE AND UNKNOWN。由于 AND 操作符中,TRUE AND UNKNOWN 的结果是 UNKNOWN,因此该行记录不会被选中。


http://www.mrgr.cn/news/82254.html

相关文章:

  • 迟来的前端面试经验
  • NetCore开发的文件下载器,国外文件地址可下载
  • 中间件自动化测试框架cmdlinker
  • python字符串函数用法大全
  • MySQL秘籍之索引与查询优化实战指南
  • pycharm如何拉取一个git项目,然后,修改后再上传到自建的项目中?
  • 期末速成C++【知识点汇总完】
  • Flutter:打包apk,详细图文介绍(一)
  • 【系统分析师】- 案例 -数据库特训
  • Redis(一)基本特点和常用全局命令
  • 免费开源跨平台SSH工具 WindTerm:媲美 xshell 的最佳平替(含详细使用教程)
  • Wend看源码-Java-Collections 工具集学习
  • blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质
  • 数据挖掘——决策树分类
  • ChatBI来啦!NBAI 正式上线 NL2SQL 功能
  • Linux postgresql-15部署文档
  • Flink operator实现自动扩缩容
  • AWVS安装使用教程
  • SpringCloud源码-openFeign
  • 关于无线AP信道调整的优化(锐捷)
  • Linux的源码在Windows下解压时提示文件名字相同(重名)的原因及解决办法
  • Promise实现原理解析,及实现方法。
  • rouyi(前后端分离版本)配置
  • msposd 开源代码之树莓派3B+ Bookworm部署
  • 笔上云世界微服务版
  • 单片机--51- RAM