理解SQL中not in 与null值的真实含义

A not in B的原理是拿A表值与B表值做是否不等的比较, 也就是a != b. 在sql中, null是缺失未知值而不是空值。

当你判断任意值a != null时, 官方说, "You cannot use arithmetic comparison operators such as =, <, or <> to test for NULL", 任何与null值的对比都将返回null. 因此返回结果为否,这点可以用代码 select if(1 = null, 'true', 'false')证实.

举个例子

sql 复制代码
select id,case when p_id is null then 'Root' 
when id not in (select p_id from tree) then 'Leaf' end type
else 'Inner' 
from tree

这种写法会导致Leaf结果完全看不到

从上述原理可见, 当询问 id not in (select p_id from tree)时, 因为p_id有null值, 返回结果全为false, 于是跳到else的结果, 返回值为inner. 所以在答案中,leaf结果从未彰显,全被inner取代.

相关推荐
数巨小码人4 小时前
Oracle SQL调优技巧实战指南
数据库·sql·oracle
无名客06 小时前
SQL语句执行时间太慢,有什么优化措施?以及衍生的相关问题
java·数据库·sql·sql语句优化
咋吃都不胖lyh6 小时前
SQL数据分析原代码--创建表与简单查询
java·数据库·sql
武昌库里写JAVA7 小时前
Java设计模式中的几种常用设计模式
vue.js·spring boot·sql·layui·课程设计
Yvonne爱编码8 小时前
后端编程开发路径:从入门到精通的系统性探索
java·前端·后端·python·sql·go
XueminXu10 小时前
Spark-SQL任务提交方式
sql·spark·spark-sql·sql文件·元数据·sql脚本·hms
在路上`20 小时前
前端学习之后端java小白(四)之数据库设计
sql·学习
智海观潮1 天前
Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件
hive·sql·spark
李少兄1 天前
IntelliJ IDEA 启动项目时配置端口指南
数据库·sql·intellij-idea
白云如幻1 天前
【Java】QBC检索和本地SQL检索
java·数据库·sql