Vi SQL
que usa ambos !=
e <>
para não ser igual . Qual é a sintaxe preferida e por quê?
Eu gosto !=
, porque <>
me lembra Visual Basic
.
NOT (A = B)
,.
Vi SQL
que usa ambos !=
e <>
para não ser igual . Qual é a sintaxe preferida e por quê?
Eu gosto !=
, porque <>
me lembra Visual Basic
.
NOT (A = B)
,.
Respostas:
Tecnicamente, eles funcionam da mesma maneira se você estiver usando o SQL Server AKA T-SQL. Se você o estiver usando em procedimentos armazenados, não há razão de desempenho para usar um sobre o outro. Em seguida, tudo se resume à preferência pessoal. Eu prefiro usar <>, pois é compatível com ANSI.
Você pode encontrar links para os vários padrões ANSI em ...
!=
por causa de sua existência em todas as linguagens influenciadas por C que usei, e porque a documentação do Python diz: "Os formulários <>
e !=
são equivalentes; por consistência com C, !=
é preferido; o que !=
é mencionado abaixo <>
também é aceito. A <>
ortografia é considerada obsoleta. " Mas SQL não é Python!
<>
mais !=
especificamente para o cumprimento ANSI, por exemplo, no Microsoft Press kit de treinamento para 70-461 exame, "Consultando o Microsoft SQL Server", eles dizem "Como um exemplo de quando a escolha da forma padrão, T-SQL suporta dois“não igual a ”operadores: <> e! =. O primeiro é padrão e o segundo não.
A maioria dos bancos de dados suporta !=
(linguagens de programação populares) e <>
(ANSI).
Bancos de dados que suportam ambos !=
e <>
:
!=
e<>
!=
e<>
!=
e<>
!=
e<>
!=
e<>
!=
e<>
!=
e<>
!=
e<>
!=
e<>
Bancos de dados que suportam o operador padrão ANSI, exclusivamente :
NOT (a = b)
vez de (a <> b)
ou (a != b)
. É o mesmo internamente?
'<>'
é do padrão SQL-92 e '!='
é um operador T-SQL proprietário . Também está disponível em outros bancos de dados, mas como não é padrão, você deve tomá-lo caso a caso.
Na maioria dos casos, você saberá a qual banco de dados está se conectando, e isso não é realmente um problema. Na pior das hipóteses, talvez você precise fazer uma pesquisa e substituir no seu SQL.
!=
parte dele. Mesmo que, para todos os efeitos práticos, seja um padrão padrão, não devemos confundir o que são e os que não são recursos padrão.
O ANSI SQL Standard define <>
como o operador "não é igual a",
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt ( 5.2 <token> and <separator>
)
Não há !=
operador de acordo com o padrão ANSI / SQL 92.
<>
é o SQL válido de acordo com o padrão SQL-92.
http://msdn.microsoft.com/en-us/library/aa276846(SQL.80).aspx
Eles são válidos e iguais em relação ao SQL Server ,
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation
Parece que a Microsoft-se preferir <>
a !=
como evidenciado em suas restrições de tabela. Pessoalmente, prefiro usar !=
porque li claramente que "não é igual", mas se você o inserir [field1 != field2]
e salvar como construtor, na próxima vez em que for consultá-lo, ele aparecerá como [field1 <> field2]
. Isso me diz que a maneira correta de fazer isso é <>
.
!=
, apesar de não ser ANSI, está mais no verdadeiro espírito do SQL como uma linguagem legível. Grita não é igual.
<>
diz que é para mim (menor que, maior que) o que é estranho. Eu sei que a intenção é que seja menor ou maior do que não seja igual, mas essa é uma maneira realmente complicada de dizer algo realmente simples.
Eu apenas tive que fazer algumas consultas SQL longas e colocá-las com carinho em um arquivo XML por várias razões estúpidas nas quais não vou entrar.
Basta dizer que o XML não está de acordo com <>
isso e eu tive que alterá-los !=
e me verificar antes de me estragar.
Você pode usar o que quiser no T-SQL. A documentação diz que ambos funcionam da mesma maneira. Eu prefiro !=
, porque lê "não é igual" à minha mente (baseada em C / C ++ / C #), mas os gurus do banco de dados parecem preferir <>
.
Uma alternativa seria usar o operador NULLIF que não seja <>
ou !=
que retorne NULL se os dois argumentos forem iguais a NULLIF no Microsoft Docs . Portanto, acredito que a cláusula WHERE pode ser modificada para <>
e da !=
seguinte forma:
NULLIF(arg1, arg2) IS NOT NULL
Como eu descobri, usar <>
e !=
não funciona para a data em alguns casos. Portanto, o uso da expressão acima faz o necessário.
<>
em relação ao uso do índice em todos os casos de canto. Além disso, a legibilidade é certamente muito pior ...
Eu preferi usar em !=
vez de, <>
porque às vezes eu uso a <s></s>
sintaxe para escrever comandos SQL. O uso !=
é mais útil para evitar erros de sintaxe nesse caso.
Ambos são aceitos no T-SQL. No entanto, parece que o uso <>
funciona muito mais rápido que!=
. Acabei de executar uma consulta complexa em uso !=
e demorou cerca de 16 segundos em média para ser executada. Alterei-os para <>
e a consulta agora leva em média 4 segundos para ser executada. Isso é uma grande melhoria!
Embora funcionem da mesma maneira, !=
significa exatamente "diferente de", enquanto<>
significa maior que e menor que o valor armazenado.
Considere >=
ou <=
, e isso fará sentido ao incluir nos seus índices as consultas ...<>
será executada mais rapidamente em alguns casos (com o índice correto), mas em outros casos (sem índice) eles serão executados da mesma forma.
Isso também depende de como o sistema de bancos de dados lê os valores !=
e <>
. O provedor do banco de dados pode apenas atalho e fazê-los funcionar da mesma maneira, para que não haja nenhum benefício. O PostgreSQL e o SQL Server não atalhos; é lido como aparece acima.