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

SELECT PersonId FROM tabPerson
WHERE PersonId <> ALL(SELECT ParentId FROM tabPerson)
SELECT PersonId FROM tabPerson
WHERE PersonId NOT IN(SELECT ParentId FROM tabPerson)

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

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

最佳答案

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

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

因此唯一的区别是其他开发人员对代码的可读性/熟悉程度。 NOT IN 表达式在这里有一个明显的优势。 ALL(同样 ANYSOME )关键字很少使用,其他开发人员会觉得陌生。

有关这些关键字的进一步说明,请参阅 MS Technet 文章 Comparison Operators Modified by ANY, SOME, or ALL。 – 顺便说一句:本文的结论是您的问题中的两个陈述是等效的。

关于sql-server - NOT IN 与 <> ALL 之间的主要区别是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36623938/

10-16 14:56