Следует ли мне использовать != или <> для обозначения "не равно" в 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?
Функция против Хранимой процедуры в SQL Server