Я видел, SQL
что использует как !=
и <>
для не равных . Какой синтаксис предпочтителен и почему?
Мне нравится !=
, потому что <>
напоминает мне о Visual Basic
.
NOT (A = B)
.
Я видел, SQL
что использует как !=
и <>
для не равных . Какой синтаксис предпочтителен и почему?
Мне нравится !=
, потому что <>
напоминает мне о Visual Basic
.
NOT (A = B)
.
Ответы:
Технически они работают одинаково, если вы используете SQL Server AKA T-SQL. Если вы используете его в хранимых процедурах, то нет причин для производительности использовать один над другим. Затем все сводится к личным предпочтениям. Я предпочитаю использовать <>, так как это соответствует ANSI.
Вы можете найти ссылки на различные стандарты ANSI на ...
!=
из-за его существования в каждом языке, на который влиял С, и потому что в документации Python говорится: «Формы <>
и !=
эквивалентны; для совместимости с С !=
предпочтительнее; там, где !=
указано ниже <>
, также принимается. <>
написание считается устаревшим «. Но SQL это не Python!
<>
более !=
специально для соответствия ANSI, например, в учебном наборе Microsoft Press для экзамена 70-461 «Запрос Microsoft SQL Server», они говорят: «В качестве примера выбора стандартной формы T-SQL поддерживает два», а не равно «операторы: <> и! =. Первый является стандартным, а второй нет. Этот случай должен быть nobrainer: перейти на стандартный!"
Поддержка большинства баз данных !=
(популярные языки программирования) и <>
(ANSI).
Базы данных, которые поддерживают !=
и <>
:
!=
и<>
!=
и<>
!=
и<>
!=
и<>
!=
и<>
!=
и<>
!=
и<>
!=
и<>
!=
и<>
Базы данных , которые поддерживают стандарт ANSI оператор, исключительно :
NOT (a = b)
вместо (a <> b)
или (a != b)
. Это то же самое внутри?
'<>'
это от стандарта 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 не <>
все в порядке, и мне пришлось поменять их !=
и проверить себя, прежде чем я сломал себя.
Вы можете использовать то, что вам нравится в T-SQL. Документация говорит, что они оба функционируют одинаково. Я предпочитаю !=
, потому что он читает «не равно» моему (на основе C / C ++ / C #), но гуру баз данных, похоже, предпочитают <>
.
Одной из альтернатив будет использование оператора NULLIF, отличного от <>
или !=
возвращающего NULL, если два аргумента равны NULLIF в документах Microsoft . Поэтому я считаю, что предложение WHERE может быть изменено для <>
и !=
следующим образом:
NULLIF(arg1, arg2) IS NOT NULL
Как я обнаружил, использование <>
и !=
не работает для даты в некоторых случаях. Следовательно, использование приведенного выше выражения делает необходимым.
<>
использование индекса во всех ключевых случаях. Кроме того, читаемость, безусловно, намного хуже ...
Я предпочел использовать !=
вместо, <>
потому что иногда я использую <s></s>
синтаксис для написания команд SQL. Использование !=
более удобно, чтобы избежать синтаксических ошибок в этом случае.
Они оба приняты в T-SQL. Тем не менее, кажется, что использование <>
работает намного быстрее, чем!=
. Я только что запустил сложный запрос, который использовался !=
, и мне потребовалось в среднем около 16 секунд. Я изменил их на, <>
и теперь выполнение запроса в среднем занимает около 4 секунд. Это огромное улучшение!
Хотя они функционируют одинаково, !=
означает точно «не равно», а <>
значит больше и меньше сохраненного значения.
Примите во внимание >=
или <=
, и это будет иметь смысл, когда факторинг ваших индексов для запросов ... <>
будет выполняться быстрее в некоторых случаях (с правильным индексом), но в некоторых других случаях (без индекса) они будут выполняться точно так же.
Это также зависит от того, как ваша система баз данных считывает значения !=
и <>
. Поставщик базы данных может просто сократить его и заставить их функционировать одинаково, так что в любом случае это не принесет никакой пользы. PostgreSQL и SQL Server не сокращают это; это читается так, как кажется выше.