Должен ли я использовать!= или для не равно в T-SQL?
Я видел SQL
, который использует как !=
и <>
на не равно. Каков предпочтительный синтаксис и почему?
мне нравится !=
, потому что <>
напоминает мне Visual Basic
.
14 ответов
технически они работают одинаково, если вы используете SQL Server AKA T-SQL. Если вы используете его в хранимых процедурах, нет причин для использования одного над другим. Затем все сводится к личным предпочтениям. Я предпочитаю использовать , поскольку он совместим с ANSI.
вы можете найти ссылки на различные стандарты ANSI на...
большинство баз данных поддерживают !=
(популярные языки программирования) и <>
(ANSI).
базы данных, которые поддерживают как !=
и <>
:
- MySQL 5.1:
!=
и<>
- PostgreSQL 8.3:
!=
и<>
- SQLite:
!=
и<>
- Oracle 10g:
!=
и<>
- Microsoft SQL Server 2000/2005/2008/2012/2016:
!=
и<>
- публикации IBM Informix с динамической сервер 10:
!=
и<>
- InterBase / Firebird:
!=
и<>
- Apache Derby 10.6:
!=
и<>
- Sybase Adaptive Server Enterprise 11.0:
!=
и<>
базы данных, которые поддерживают 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]
и сохраните его как ограничение, в следующий раз, когда вы запросите его, он появится как [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 не сокращают это; он читается, как показано выше.