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’)证实.
举个例子

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取代.
到此这篇关于SQL中not in与null值的具体使用的文章就介绍到这了,更多相关SQL not in与null值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Sql Server中Cross Apply关键字的使用 详解
在 SQL Server 中,Cross Apply 关键字主要用于从一个表中获取数据,并对每一行数据应用一个表值函数,然后返回函数的结果,这篇文章主要介绍了Sql Server中Cross Apply关键字的使用 ,需要的朋友可以参考下2023-11-11
Sql学习第四天——SQL 关于with cube,with rollup和grouping解释及演示
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合,接下再看看对grouping的解释,感兴趣的朋友可以参考下哈2013-03-03
SQL Server误区30日谈 第12天 TempDB的文件数和需要和CPU数目保持一致
TempDB的文件没有必要分布在多个存储器之间。如果你看到PAGELATCH类型的等待,即使你进行了分布也不会改善性能,而如果PAGEIOLATCH型的等待,或许你需要多个存储器,但这也不是必然-有可能你需要讲整个TempDB迁移到另一个存储系统,而不是仅仅为TempDB增加一个文件2013-01-01
基于Microsoft SQL Server实现编写汉字转拼音函数
在搜索应用中,我们一般会提供一个搜索框,输入关健字,点击查询按钮以获取结果数据,大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果,本文给大家就介绍了基于Microsoft SQL Server实现编写汉字转拼音函数,需要的朋友可以参考下2024-03-03
SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
这篇文章主要介绍了SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息的相关资料,需要的朋友可以参考下2015-11-11


最新评论