Как использовать НЕ в предложении Where?

#sql #sql-server-2005 #sql-server-2008

#sql #sql-server-2005 #sql-server-2008

Вопрос:

в чем разница между if я написал запрос NOT следующими способами.

 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. Проверьте план выполнения, чтобы увидеть, есть ли разница.

2. Насколько я понимаю, это ничем не отличается от выражения !(5 == 3) and 5 != 3 . Они оба оценивают одно и то же. За исключением того, что последнее лучше передает вашу цель.

3. В зависимости от ваших индексов, я полагаю, компилятор может выбрать другой путь, но я просто провел тесты с двумя простыми таблицами и получил одинаковый план выполнения для обоих методов.

4. @Michael я просто проверяю, что их планы выполнения одинаковы и имеют 50% от стоимости запроса.

5. @izuriel когда я делал это для такого поля, у меня были значения в этом поле «INF», где я использую <Имя столбца>, А НЕ ‘%INF%’ в моем условии where, это выдает ошибку, и когда я делаю это НЕ <имя столбца>, А ‘%INF%»это дает мне возврат без ошибок.

Ответ №1:

Разницы нет. Они будут иметь тот же результат запроса.

И я считаю, что планы выполнения должны быть идентичными, но лучший способ выяснить это — зафиксировать фактические планы выполнения каждого запроса.

Я лично всегда выбираю ... WHERE SomeCol NOT IN (...) , так как он читается немного понятнее, чем ... NOT WHERE SomeCol IN (...) . Но это все личные предпочтения и то, что вы считаете более удобным для чтения и обслуживания.

Комментарии:

1. @VikrantMore нет проблем, рад помочь 🙂