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

相关推荐
2301_800256114 小时前
第七章 空间存储与索引 知识点梳理3(空间填充曲线)
数据库·笔记·sql·postgresql
笃行客从不躺平6 小时前
遇到大SQL怎么处理
java·开发语言·数据库·sql
last_zhiyin7 小时前
Oracle sql tuning guide 翻译 Part 6-5 --- Hint使用报告的操作方法和例子
数据库·sql·oracle·sql tunning
Rysxt_7 小时前
Spring Boot SPI 教程
java·数据库·sql
e***09611 小时前
SQL 中UPDATE 和 DELETE 语句的深入理解与应用
数据库·sql
w***42412 小时前
SQL-Server链接服务器访问Oracle数据
服务器·sql·oracle
q***098013 小时前
MySQL 常用 SQL 语句大全
数据库·sql·mysql
q***649713 小时前
VS与SQL Sever(C语言操作数据库)
c语言·数据库·sql
BG8EQB14 小时前
开发者的存储救赎计划:从SQL到云原生的架构演进
sql·云原生·架构
百***75741 天前
从 SQL 语句到数据库操作
数据库·sql·oracle