如何在Where子句中使用NOT?

4
以下两种方式的NOT查询有何区别?

1. NOT apple

2. -apple

SELECT iBatchID,COUNT(*) FROM #temp WHERE NOT iBatchID  IN (1) GROUP BY iBatchID

SELECT iBatchID,COUNT(*) FROM #temp WHERE iBatchID NOT IN (1) GROUP BY iBatchID

如果我使用 WHERE NOT iBatchID IN (1)WHERE iBatchID NOT IN (1),它们之间有什么区别?


1
检查执行计划以查看是否有差异。 - Michael Berkowski
2
据我理解,这与说 !(5 == 3)5 != 3 没有任何区别。它们都会得出相同的结果。只不过后者更能传达你的意图。 - Brandon Buck
1
根据你的索引,编译器可能会选择不同的路径,但我只是针对两个简单的表运行了测试,并得到了相同的执行计划。 - Michael Berkowski
@Michael,我刚才检查了它们的执行计划,两个都是一样的,查询成本都占到了50%。 - Vikrant More
@izuriel 当我在处理这个字段时,发现该字段中有“INF”值。当我在where条件中使用<Column Name> NOT LIKE '%INF%'时,会出现错误。但是,当我使用NOT <column Name> LIKE '%INF%'时,可以返回结果而没有错误。 - Vikrant More
1个回答

4

没有区别。它们将具有相同的查询结果。

我相信执行计划应该是相同的,但找出实际执行计划的最佳方法是捕获每个查询的实际执行计划。

个人而言,我总是选择... WHERE SomeCol NOT IN (...),因为它读起来比... NOT WHERE SomeCol IN (...)更清晰。但这都是个人偏好,取决于您认为哪种更易读和可维护。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接