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

相关推荐
TY-202521 分钟前
数据库——SQL约束&&窗口函数介绍
数据库·sql·oracle
java1234_小锋26 分钟前
SQL里where条件的顺序影响索引使用吗?
数据库·sql
Dreams_l1 小时前
MySQL初阶:sql事务和索引
数据库·sql·mysql
鸿乃江边鸟2 小时前
Starrocks的主键表涉及到的MOR Delete+Insert更新策略
大数据·starrocks·sql
不知几秋11 小时前
sqlilab-Less-18
sql
Amctwd12 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
lqlj223318 小时前
Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
数据库·sql·spark
遗憾皆是温柔19 小时前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
未来之窗软件服务19 小时前
Cacti 未经身份验证SQL注入漏洞
android·数据库·sql·服务器安全
_星辰大海乀21 小时前
表的设计、聚合函数
java·数据结构·数据库·sql·mysql·数据库开发