NOT IN 与 <> ALL 之间的主要区别是什么?

dii*_*___ 5 t-sql sql-server performance execution

我问自己是否应该使用<> ALLNOT IN。看一下这两个示例查询:

SELECT PersonId FROM tabPerson
WHERE PersonId <> ALL(SELECT ParentId FROM tabPerson)
Run Code Online (Sandbox Code Playgroud)
SELECT PersonId FROM tabPerson
WHERE PersonId NOT IN(SELECT ParentId FROM tabPerson)
Run Code Online (Sandbox Code Playgroud)

这两个查询返回完全相同的结果。

<> ALL现在我想知道和之间的主要区别NOT IN是什么。有人有想法吗?

Phi*_*ilS 1

两个查询将产生完全相同的结果。即使子查询中查询的列包含NULL值,也没有任何区别。

\n\n

我在这里比较了数据库中表上此类查询的几个执行计划,在每种情况下它们也完全相同。

\n\n

因此,唯一的区别是其他开发人员的代码可读性/熟悉程度。这里的表达有一个明显的优点NOT INALL(and equal ANYand )关键字SOME很少使用,并且会让其他开发人员感到陌生。

\n\n

有关这些关键字的进一步说明,请参阅 MS Technet 文章由 ANY、SOME 或 ALL 修改的比较运算符。\xe2\x80\x93 顺便说一句:本文的结论是,您问题中的两个陈述是等效的。

\n