Я видел SQL
который использует оба параметра !=
и <>
для не равных. Какой предпочтительный синтаксис и почему?
Мне нравится !=
, Потому что <>
напоминает мне Visual Basic
.
Я видел SQL
который использует оба параметра !=
и <>
для не равных. Какой предпочтительный синтаксис и почему?
Мне нравится !=
, Потому что <>
напоминает мне Visual Basic
.
Технически они функционируют одинаково, если вы используете SQL Сервер AKA T-SQL. Если вы используете его в хранимых процедурах, нет причин для использования одного над другим. Затем это сводится к личным предпочтениям. Я предпочитаю использовать < > , поскольку он совместим с ANSI.
Вы можете найти ссылки на различные стандарты ANSI в...
Большинство баз данных поддерживают !=
(популярные языки программирования) и <>
(ANSI).
Базы данных, поддерживающие как !=
, так и <>
:
!=
и <>
!=
и <>
!=
и <>
!=
и <>
!=
и <>
!=
и <>
!=
и <>
!=
и <>
!=
и <>
Базы данных, поддерживающие стандартный оператор ANSI, исключительно:
'<>'
относится к стандарту 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]
и сохраните его как protrait, в следующий раз, когда вы его запросите, он появится как [field1 <> field2]
. Это говорит мне, что правильный способ сделать это - <>
.
!=
, несмотря на то, что он не является ANSI, больше соответствует истинному духу SQL как читаемого языка. Он кричит неравномерно.
<>
говорит это мне (меньше, больше), что просто странно. Я знаю, что намерение состоит в том, что оно меньше или больше, чем, следовательно, не равно, но что действительно сложный способ сказать что-то действительно простое.
Мне нужно было занять несколько длинных SQL-запросов и любовно вставить их в XML файл для целой кучи глупых причин, по которым я не буду вдаваться.
Достаточно сказать, что XML вообще не с <>
, и мне пришлось сменить их на !=
и проверить себя, прежде чем я сгребаю себя.
Вы можете использовать то, что вам нравится в T-SQL. В документации говорится, что оба они работают одинаково. Я предпочитаю !=
, потому что он читает "не равно" моему (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 сервер не сокращает это; он читается, как он появляется выше.