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

相关推荐
hamawari几秒前
SQL语法
数据库·sql·oracle
invicinble2 小时前
对于mysql层对sql层面的知识体系的理解和把握
数据库·sql·mysql
l1t2 小时前
DeepSeek辅助总结postgresql wiki提供的数独求解器
数据库·sql·postgresql
万行3 小时前
SQL进阶&索引篇
开发语言·数据库·人工智能·sql
山岚的运维笔记4 小时前
SQL Server笔记 -- 第13章:IF...ELSE
数据库·笔记·sql·microsoft·sqlserver
酉鬼女又兒4 小时前
SQL23 统计每个学校各难度的用户平均刷题数
数据库·sql·算法
写代码的【黑咖啡】5 小时前
HiveSQL 语法详解与常用 SQL 写法实战
数据库·sql
愤怒的苹果ext6 小时前
flink-sql-connector-elasticsearch8兼容Flink SQL同步到Elasticsearch8.18.8
sql·flink·es8
我真的是大笨蛋18 小时前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
tod1131 天前
力扣高频 SQL 50 题阶段总结(四)
开发语言·数据库·sql·算法·leetcode