He visto SQL
que usa ambos !=
y <>
para no igual . ¿Cuál es la sintaxis preferida y por qué?
Me gusta !=
, porque <>
me recuerda Visual Basic
.
NOT (A = B)
.
He visto SQL
que usa ambos !=
y <>
para no igual . ¿Cuál es la sintaxis preferida y por qué?
Me gusta !=
, porque <>
me recuerda Visual Basic
.
NOT (A = B)
.
Respuestas:
Técnicamente funcionan igual si está utilizando SQL Server AKA T-SQL. Si lo está utilizando en procedimientos almacenados, no hay razón de rendimiento para usar uno sobre el otro. Luego se reduce a la preferencia personal. Prefiero usar <> ya que cumple con ANSI.
Puede encontrar enlaces a los diversos estándares ANSI en ...
!=
debido a su existencia en todos los lenguajes influenciados por C que he usado, y porque la documentación de Python dice: "Las formas <>
y !=
son equivalentes; por coherencia con C, !=
es preferible; donde !=
se menciona a continuación <>
también se acepta. La <>
ortografía se considera obsoleta ". ¡Pero SQL no es Python!
<>
más !=
específicamente para el cumplimiento de ANSI, por ejemplo, en el kit de capacitación de Microsoft Press para el examen 70-461, "Consultar Microsoft SQL Server", dicen "Como ejemplo de cuándo elegir el formulario estándar, T-SQL admite dos" no igual a "operadores: <> y! =. El primero es estándar y el segundo no. Este caso debería ser un nobrainer: ¡elija el estándar!"
La mayoría de las bases de datos son compatibles !=
(lenguajes de programación populares) y <>
(ANSI).
Bases de datos que admiten ambos !=
y <>
:
!=
y<>
!=
y<>
!=
y<>
!=
y<>
!=
y<>
!=
y<>
!=
y<>
!=
y<>
!=
y<>
Bases de datos que admiten el operador estándar ANSI, exclusivamente :
NOT (a = b)
lugar de (a <> b)
o (a != b)
. ¿Es lo mismo internamente?
'<>'
es del estándar SQL-92 y '!='
es un operador propietario de T-SQL. También está disponible en otras bases de datos, pero como no es estándar, debe tomarlo caso por caso.
En la mayoría de los casos, sabrá a qué base de datos se está conectando, por lo que esto no es realmente un problema. En el peor de los casos, puede que tenga que hacer una búsqueda y reemplazar en su SQL.
!=
no es parte de él. Aunque para todos los fines prácticos es un estándar de facto, no debemos confundir cuáles son y cuáles no son características estándar.
El estándar ANSI SQL define <>
como el operador "no igual a",
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt ( 5.2 <token> and <separator>
)
No hay !=
operador de acuerdo con el estándar ANSI / SQL 92.
<>
es el SQL válido de acuerdo con el estándar SQL-92.
http://msdn.microsoft.com/en-us/library/aa276846(SQL.80).aspx
Ambos son válidos e iguales con respecto a SQL Server ,
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation
Parece que Microsoft sí mismos prefieren <>
a !=
como se evidencia en sus restricciones de tabla. Personalmente prefiero usarlo !=
porque lo leo claramente como "no igual", pero si ingresa [field1 != field2]
y lo guarda como una restricción, la próxima vez que lo consulte, aparecerá como [field1 <> field2]
. Esto me dice que la forma correcta de hacerlo es <>
.
!=
, a pesar de no ser ANSI, está más en el verdadero espíritu de SQL como lenguaje legible. Grita no igual.
<>
dice que es para mí (menor que, mayor que) lo que es extraño. Sé que la intención es que sea menor o mayor que, por lo tanto, no es igual, pero esa es una forma realmente complicada de decir algo realmente simple.
Solo tuve que tomar algunas consultas SQL largas y colocarlas con amor en un archivo XML por un montón de estúpidas razones por las que no entraré.
Basta con decir que XML no funciona <>
y tuve que cambiarlos !=
y comprobarlo antes de que me desarmara.
Puedes usar lo que quieras en T-SQL. La documentación dice que ambos funcionan de la misma manera. Prefiero !=
, porque dice "no es igual" a mi mente (basada en C / C ++ / C #), pero los gurús de bases de datos parecen preferir <>
.
Una alternativa sería usar el operador NULLIF que no sea <>
o !=
que devuelva NULL si los dos argumentos son NULLIF iguales en Microsoft Docs . Entonces, creo que la cláusula WHERE se puede modificar <>
y de la !=
siguiente manera:
NULLIF(arg1, arg2) IS NOT NULL
Como encontré eso, usar <>
y !=
no funciona para la fecha en algunos casos. Por lo tanto, usar la expresión anterior hace lo necesario.
<>
con respecto al uso del índice en todos los casos de esquina. Además, la legibilidad es ciertamente mucho peor ...
Preferí usar en !=
lugar de <>
porque a veces uso la <s></s>
sintaxis para escribir comandos SQL. Usar !=
es más útil para evitar errores de sintaxis en este caso.
Ambos son aceptados en T-SQL. Sin embargo, parece que el uso <>
funciona mucho más rápido que!=
. Acabo de ejecutar una consulta compleja que estaba usando !=
, y tardó unos 16 segundos en promedio en ejecutarse. Los cambié a <>
y la consulta ahora tarda unos 4 segundos en promedio para ejecutarse. Esa es una gran mejora!
Aunque funcionan de la misma manera, !=
significa exactamente "no igual a", mientras que <>
significa mayor y menor que el valor almacenado.
Considere >=
o <=
, y esto tendrá sentido al incluir sus índices en consultas ... <>
se ejecutará más rápido en algunos casos (con el índice correcto), pero en otros casos (sin índice) se ejecutarán de la misma manera.
Esto también depende de cómo su sistema de bases de datos lee los valores !=
y <>
. El proveedor de la base de datos puede simplemente atajarlo y hacer que funcionen de la misma manera, por lo que no hay ningún beneficio de ninguna manera. PostgreSQL y SQL Server no atacan esto; se lee como aparece arriba.