Должен ли я использовать!= или для не равно в T-SQL?

Я видел SQL, который использует как != и <> на не равно. Каков предпочтительный синтаксис и почему?

мне нравится !=, потому что <> напоминает мне Visual Basic.

14 ответов


технически они работают одинаково, если вы используете SQL Server AKA T-SQL. Если вы используете его в хранимых процедурах, нет причин для использования одного над другим. Затем все сводится к личным предпочтениям. Я предпочитаю использовать , поскольку он совместим с ANSI.

вы можете найти ссылки на различные стандарты ANSI на...

http://en.wikipedia.org/wiki/SQL


большинство баз данных поддерживают != (популярные языки программирования) и <> (ANSI).

базы данных, которые поддерживают как != и <>:

базы данных, которые поддерживают ANSI стандартный оператор исключительно:

  • IBM DB2 UDB 9.5:<>
  • Microsoft Access 2010:<>

'<>' с стандарт SQL-92 и '!=' это проприетарный оператор T-SQL. Он также доступен в других базах данных, но поскольку он не является стандартным, вы должны принимать его на индивидуальной основе.

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


стандарт ANSI SQL определяет <> как оператор "не равно",

http://www.contrib.andrew.cmu.edu / ~shadow/sql/sql1992.txt (5.2 <token> and <separator>)

нет != оператор согласно стандарту ANSI/SQL 92.


<> является допустимым SQL в соответствии со стандартом SQL-92.

http://msdn.microsoft.com/en-us/library/aa276846 (SQL.80).aspx


Они оба действительны и одинаковы в отношении SQL Server,

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation


похоже, что Microsoft сами предпочитают <> до != Как видно из их ограничений таблицы. Я лично предпочитаю использовать != потому что я ясно читаю это как "не равно", но если вы введете [field1 != field2] и сохраните его как ограничение, в следующий раз, когда вы запросите его, он появится как [field1 <> field2]. Это говорит мне, что правильный способ сделать это <>.


!=, несмотря на то, что не является ANSI, больше в истинном духе SQL как читаемый язык. Он кричит не одинаково. <> говорит, что это мне (меньше, больше), что просто странно. Я знаю, что намерение состоит в том, что это либо меньше, либо больше, следовательно, не равно, но это действительно сложный способ сказать что-то действительно простое.

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

достаточно сказать, что XML не является с <> вообще, и мне пришлось изменить их на != и проверить себя, прежде чем я riggedy крушение себе.


Вы можете использовать то, что вам нравится в T-SQL. документация говорит, что они оба работают одинаково. Я предпочитаю !=, потому что он читает "не равно" моему (на основе C/C++/C#) уму, но гуру базы данных, похоже, предпочитают <>.


Я понимаю, что синтаксис C != находится в SQL Server из-за его наследия Unix (еще в дни Sybase SQL Server, до Microsoft SQL Server 6.5).


одной из альтернатив было бы использовать оператор NULLIF, отличный от <> или != который возвращает NULL, если два аргумента равны NULLIF в Microsoft Docs. Поэтому я считаю, что предложение WHERE может быть изменено для <> и != следующим образом:

NULLIF(arg1, arg2) IS NOT NULL

как я обнаружил, используя <> и != в некоторых случаях не работает для даты. Следовательно, использование вышеуказанного выражения делает необходимое.


Я предпочел бы использовать != вместо <> потому что иногда я использую <s></s> синтаксис для написания команд SQL. Используя != более удобно избегать синтаксических ошибок в этом случае.


они оба приняты в T-SQL. Однако, похоже, что с помощью <> работает намного быстрее, чем !=. Я просто запустил сложный запрос, который использовал !=, и в среднем это заняло около 16 секунд. Я изменил их на <> и запрос теперь занимает около 4 секунд в среднем для запуска. Это огромное улучшение!


хотя они функционируют одинаково,!= означает "не равно", в то время как <> означает больше и меньше сохраненного значения.

считают >= или <=, и это будет иметь смысл при расчете индексов для запросов... <> будет работать быстрее в некоторых случаях (с правильным индексом), но в некоторых других случаях (без индекса) они будут работать точно так же.

это также зависит от того, как ваша система баз данных считывает значения != и <>. Поставщик базы данных может просто сократить его и заставить их работать одинаково, поэтому в любом случае нет никакой выгоды. PostgreSQL и SQL Server не сокращают это; он читается, как показано выше.