Я видел, SQL
что использует как !=
и <>
для не равных . Какой синтаксис предпочтителен и почему?
Мне нравится !=
, потому что <>
напоминает мне о Visual Basic
.
sql
sql-server
tsql
Боб Дворник
источник
источник
NOT (A = B)
.Ответы:
Технически они работают одинаково, если вы используете SQL Server AKA T-SQL. Если вы используете его в хранимых процедурах, то нет причин для производительности использовать один над другим. Затем все сводится к личным предпочтениям. Я предпочитаю использовать <>, так как это соответствует ANSI.
Вы можете найти ссылки на различные стандарты ANSI на ...
http://en.wikipedia.org/wiki/SQL
источник
!=
из-за его существования в каждом языке, на который влиял С, и потому что в документации 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 #), но гуру баз данных, похоже, предпочитают<>
.источник
Я понимаю, что синтаксис C
!=
находится в SQL Server из-за его наследия Unix (еще во времена Sybase SQL Server, до Microsoft SQL Server 6.5).источник
Одной из альтернатив будет использование оператора NULLIF, отличного от
<>
или!=
возвращающего NULL, если два аргумента равны NULLIF в документах Microsoft . Поэтому я считаю, что предложение WHERE может быть изменено для<>
и!=
следующим образом:Как я обнаружил, использование
<>
и!=
не работает для даты в некоторых случаях. Следовательно, использование приведенного выше выражения делает необходимым.источник
<>
использование индекса во всех ключевых случаях. Кроме того, читаемость, безусловно, намного хуже ...Я предпочел использовать
!=
вместо,<>
потому что иногда я использую<s></s>
синтаксис для написания команд SQL. Использование!=
более удобно, чтобы избежать синтаксических ошибок в этом случае.источник
Они оба приняты в T-SQL. Тем не менее, кажется, что использование
<>
работает намного быстрее, чем!=
. Я только что запустил сложный запрос, который использовался!=
, и мне потребовалось в среднем около 16 секунд. Я изменил их на,<>
и теперь выполнение запроса в среднем занимает около 4 секунд. Это огромное улучшение!источник
Хотя они функционируют одинаково,
!=
означает точно «не равно», а<>
значит больше и меньше сохраненного значения.Примите во внимание
>=
или<=
, и это будет иметь смысл, когда факторинг ваших индексов для запросов ...<>
будет выполняться быстрее в некоторых случаях (с правильным индексом), но в некоторых других случаях (без индекса) они будут выполняться точно так же.Это также зависит от того, как ваша система баз данных считывает значения
!=
и<>
. Поставщик базы данных может просто сократить его и заставить их функционировать одинаково, так что в любом случае это не принесет никакой пользы. PostgreSQL и SQL Server не сокращают это; это читается так, как кажется выше.источник