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

相关推荐
在未来等你8 小时前
SQL进阶之旅 Day 21:临时表与内存表应用
sql·mysql·postgresql·database·temporary-table·memory-table·sql-optimization
zhuiQiuMX9 小时前
分享今天做的力扣SQL题
sql·算法·leetcode
老纪的技术唠嗑局11 小时前
重剑无锋,大巧不工 —— OceanBase 中的 Nest Loop Join 使用技巧分享
数据库·sql
寒山李白11 小时前
MySQL复杂SQL(多表联查/子查询)详细讲解
sql·mysql·子查询·多表联查
nanzhuhe13 小时前
sql中group by使用场景
数据库·sql·数据挖掘
消失在人海中13 小时前
oracle sql 语句 优化方法
数据库·sql·oracle
程序员岳焱14 小时前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql
UGOTNOSHOT15 小时前
每日八股文6.3
数据库·sql
Lx35218 小时前
LIKE查询中索引有效利用的前缀匹配策略
后端·sql·oracle
岁忧19 小时前
LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上
sql·算法·leetcode