Следует ли мне использовать != или <> для обозначения "не равно" в T-SQL?
У меня возник вопрос по поводу синтаксиса SQL. Я заметил, что в коде используется как оператор !=, так и оператор <> для обозначения "не равно". Какой из этих синтаксисов предпочтителен и почему?
Лично мне больше нравится !=, так как <> напоминает мне о Visual Basic.
5 ответ(ов)
Технически они функционируют одинаково, если вы используете SQL Server, также известный как T-SQL. Если вы используете их в хранимых процедурах, то нет никаких причин по производительности, чтобы предпочесть один вариант другому. В конечном итоге это сводится к личным предпочтениям. Лично я предпочитаю использовать <>, так как это соответствует стандартам ANSI.
Вы можете найти ссылки на различные стандарты ANSI по следующему адресу...
Стандарт ANSI SQL определяет <> как оператор "не равно".
Согласно стандарту ANSI/SQL 92, оператора != не существует. В документации вы можете увидеть соответствующую часть: http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt (раздел 5.2 <token> and <separator>).
Таким образом, для проверки на неравенство следует использовать <>.
Судя по всему, Microsoft сами предпочитают использовать <> вместо !=, что видно на примере ограничений таблиц. Лично я предпочитаю использовать !=, так как считаю, что это явно читается как "не равно". Однако, если вы введете [field1 != field2] и сохраните это как ограничение, при следующем запросе оно отобразится как [field1 <> field2]. Это наводит на мысль, что правильным способом является использование <>.
!=, хотя и не является стандартом ANSI, в большей степени соответствует истинному духу SQL как читаемого языка. Это явно сигнализирует о том, что значения не равны.
Символ <> вызывает ассоциации с менее чем и более чем, что кажется довольно странным. Я понимаю, что имеется в виду, что это либо меньше, либо больше, а значит не равно, но такой подход довольно сложен для выражения такой простой идеи.
Недавно мне пришлось взять несколько длинных SQL-запросов и аккуратно перенести их в XML файл по множеству глупых причин, о которых я не буду углубляться.
Скажу лишь, что XML совершенно не поддерживает <>, и мне пришлось заменить их на !=, чтобы не запутаться в дальнейшем.
Да, вы правы. Синтаксис !=, используемый для обозначения неравенства в SQL Server, действительно имеет свои корни в Unix, так как SQL Server изначально был основан на Sybase, который был разработан для работы в среде Unix. В более ранних версиях SQL Server, до Microsoft SQL Server 6.5, использовался именно этот синтаксис. Важно отметить, что хотя в SQL стандарте для обозначения неравенства также используется оператор <>, оба варианта признаются и поддерживаются в SQL Server. Это делает язык более гибким и предоставляет разработчикам возможность использовать тот синтаксис, который им более привычен.
"Вставка результатов хранимой процедуры в временную таблицу"
Как экранировать одинарную кавычку в SQL Server?
Как выполнить оператор UPDATE с JOIN в SQL Server?
Возможно ли задать условия в Count()?
Создание хранимой процедуры, если она еще не существует