Должен ли я использовать! = Или <> для неравных в T-SQL? - PullRequest
756 голосов
/ 07 апреля 2009

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

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

Ответы [ 14 ]

699 голосов
/ 07 апреля 2009

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

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

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

  • IBM DB2 UDB 9.5: <>
  • Microsoft Access 2010: <>
506 голосов
/ 07 апреля 2009

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

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

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

105 голосов
/ 07 апреля 2009

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

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

42 голосов
/ 07 апреля 2009

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

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

Нет оператора != в соответствии со стандартом ANSI / SQL 92.

31 голосов
/ 07 апреля 2009

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

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

22 голосов
/ 07 апреля 2009
17 голосов
/ 05 февраля 2010

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

15 голосов
/ 12 октября 2009

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

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

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

11 голосов
/ 07 апреля 2009

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

9 голосов
/ 07 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...