理解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取代.

相关推荐
pen-ai6 分钟前
【SQL】一文速通SQL
数据库·sql
hummhumm5 小时前
第 12 章 - Go语言 方法
java·开发语言·javascript·后端·python·sql·golang
hummhumm5 小时前
第 8 章 - Go语言 数组与切片
java·开发语言·javascript·python·sql·golang·database
ModelBulider7 小时前
十三、注解配置SpringMVC
java·开发语言·数据库·sql·mysql
FIN技术铺9 小时前
问:数据库的六种锁机制实践总结?
数据库·sql·oracle
张某布响丸辣13 小时前
SQL中的时间类型:深入解析与应用
java·数据库·sql·mysql·oracle
爪哇学长16 小时前
SQL 注入详解:原理、危害与防范措施
xml·java·数据库·sql·oracle
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ16 小时前
mybatisPlus打印sql配置
数据库·sql
给我整点护发素17 小时前
Flink执行sql时报错
大数据·sql·flink
明月与玄武20 小时前
关于性能测试:数据库的 SQL 性能优化实战
数据库·sql·性能优化