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

相关推荐
编程、小哥哥2 小时前
oracle值sql记录
数据库·sql·oracle
hkfkn5 小时前
SQL刷题日志(day2)
数据库·sql
songx_9913 小时前
数据库10(代码相关语句)
数据库·sql
caihuayuan415 小时前
Redis奇幻之旅(三)1.redis客户端与服务端
java·大数据·sql·spring·课程设计
King.62417 小时前
从 SQL2API 到 Text2API:开启数据应用开发的新征程
大数据·开发语言·数据库·sql·低代码
pwzs18 小时前
理解最左前缀原则:联合索引命中规则全解析(含流程图)
数据库·sql·mysql
Always_away19 小时前
数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记4
数据库·笔记·sql·学习
在下_诸葛20 小时前
狂神SQL学习笔记六:列的数据类型讲解
笔记·sql·学习
weixin_3077791321 小时前
Azure Synapse Dedicated SQL pool里大型表对大型表分批合并数据的策略
数据仓库·sql·microsoft·azure
随记1231 天前
Microsoft SQL Server Management 一键删除数据库所有外键
数据库·sql·sqlserver