Sql server 不在与<;之间的主要区别是什么&燃气轮机;全部的
我在问自己是应该在中使用Sql server 不在与<;之间的主要区别是什么&燃气轮机;全部的,sql-server,performance,tsql,execution,Sql Server,Performance,Tsql,Execution,我在问自己是应该在中使用全部还是不使用。请看以下两个示例查询: SELECT PersonId FROM tabPerson WHERE PersonId <> ALL(SELECT ParentId FROM tabPerson) 这两个查询返回的结果完全相同 现在我想知道ALL和NOT IN之间的主要区别是什么。有人有想法吗?这句话很相似: DECLARE @t1 TABLE (a INT) INSERT INTO @t1 VALUES (1), (2) DECLARE @t
全部
还是不使用。请看以下两个示例查询:
SELECT PersonId FROM tabPerson
WHERE PersonId <> ALL(SELECT ParentId FROM tabPerson)
这两个查询返回的结果完全相同
现在我想知道ALL
和NOT IN
之间的主要区别是什么。有人有想法吗?这句话很相似:
DECLARE @t1 TABLE (a INT)
INSERT INTO @t1 VALUES (1), (2)
DECLARE @t2 TABLE (b INT)
INSERT INTO @t2 VALUES (2)
SELECT * FROM @t1
WHERE a <> ALL(SELECT b FROM @t2)
SELECT * FROM @t1
WHERE a NOT IN (SELECT b FROM @t2)
两个查询将产生完全相同的结果。即使子查询中查询的列包含空值,也不会有任何区别
我在这里比较了数据库中表上这类查询的两个执行计划,在每种情况下它们也完全相同
因此,唯一的区别是其他开发人员对代码的可读性/熟悉程度。这里的表达式中没有有一个明显的优点。ALL
(以及同样的ANY
和SOME
)关键字很少使用,其他开发人员会感到陌生
有关这些关键字的进一步解释,请参阅MS Technet文章顺便说一句:本文的结论是,您的问题中的两个语句是等价的。如果您想让其他人理解您的查询,请使用而不是我假设第二个短路,但编译器可能会识别出等价性。实际上,您可以在SSMS中运行这两个查询并查看实际的查询计划。你不知道怎么做吗?@TimSchmelter我知道ALL
不如not IN
可读,我讨厌不可读的代码,但是我想知道它们之间的性能或执行是否有任何差异。哈,刚刚运行了它,查询计划100%完全相同。所以这其实没有什么区别,只是可读性不同而已。更好的可读性一直是我的目标。从SQLServer6.5开始,我就一直在使用SQLServer,直到今天我才听说这一切。BOL中的示例是如此精心设计,以至于在现实世界中没有人会编写这样的查询。是的,我知道他们返回相同的结果。但我想知道在性能或执行方面是否存在差异。
DECLARE @t1 TABLE (a INT)
INSERT INTO @t1 VALUES (1), (2)
DECLARE @t2 TABLE (b INT)
INSERT INTO @t2 VALUES (2)
SELECT * FROM @t1
WHERE a <> ALL(SELECT b FROM @t2)
SELECT * FROM @t1
WHERE a NOT IN (SELECT b FROM @t2)
INSERT INTO @t2(b) VALUES (NULL)
SELECT * FROM @t1
WHERE a <> ALL(SELECT b FROM @t2)
SELECT * FROM @t1
WHERE a NOT IN (SELECT b FROM @t2)