¡Debería usarlo!= o < > para no igual en T-SQL?


He visto SQL que utiliza != y <> para no es igual. ¿Cuál es la sintaxis preferida y por qué?

Me gusta != porque <> me recuerda a Visual Basic.

Author: DineshDB, 2009-04-07

14 answers

Técnicamente funcionan igual si estás usando SQL Server también conocido como T-SQL. Si lo está utilizando en procedimientos almacenados no hay ninguna razón de rendimiento para usar uno sobre el otro. Luego se reduce a la preferencia personal. Prefiero usar ya que es compatible con ANSI.

Puede encontrar enlaces a los diversos estándares ANSI en...

Http://en.wikipedia.org/wiki/SQL

 464
Author: DBAndrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-01 19:28:15

La mayoría de las bases de datos soportan != (lenguajes de programación populares) y <> (ANSI).

Bases de datos que soportan != y <>:

Bases de datos que soportan el operador estándar ANSI, exclusivamente :

  • IBM DB2 UDB 9.5: <>
  • Microsoft Access 2010: <>
 667
Author: Bill Karwin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-14 10:05:27

'<>' es del estándar SQL-92 y '!=' es un operador T-SQL propietario . 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, es posible que tenga que hacer una búsqueda y reemplazar en su SQL.

 94
Author: Adam Lassek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 16:38:46

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 existe un operador != según el estándar ANSI/SQL 92.

 37
Author: Mehrdad Afshari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-01 06:49:25

<> es el SQL válido según el estándar SQL-92.

Http://msdn.microsoft.com/en-us/library/aa276846 (SQL. 80). aspx

 23
Author: Justin Niessner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-06 06:50:41
 18
Author: madcolor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-20 11:33:43

Parece que los propios Microsoft prefieren <> a != como se evidencia en sus restricciones de tabla. Personalmente prefiero usar != porque claramente lo leo como "no igual", pero si ingresa [field1 != field2] y lo guarda como una restricción, la próxima vez que lo consulte, se mostrará como [field1 <> field2]. Esto me dice que la forma correcta de hacerlo es <>.

 14
Author: Kyle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-06 06:51:44

!=, a pesar de no ser ANSI, está más en el verdadero espíritu de SQL como un lenguaje legible. Grita no igual. <> dice que es para mí (menor que, mayor que) lo que es simplemente raro. Sé que la intención es que sea menor o mayor que, por lo tanto, no igual, pero esa es una forma realmente complicada de decir algo realmente simple.

Solo he tenido que tomar algunas consultas SQL largas y colocarlas amorosamente en un archivo XML por un montón de estúpidas razones por las que no iré en.

Basta con decir XML no está abajo con <> en absoluto y tuve que cambiarlos a != y comprobar a mí mismo antes de que riggedy destrozado a mí mismo.

 13
Author: Fat Albert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-06 06:52:23

Puede usar lo que quiera en T-SQL. La documentación dice que ambos funcionan de la misma manera. Prefiero !=, porque dice "no igual" a mi mente (basada en C/C++/C#), pero los gurús de la base de datos parecen preferir <>.

 9
Author: Steve Haigh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-12 15:13:39

Entiendo que la sintaxis de C != está en SQL Server debido a su herencia Unix (en los días de Sybase SQL Server, antes de Microsoft SQL Server 6.5).

 7
Author: Karl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-04 02:14:57

Una alternativa sería usar el operador NULLIF distinto de <> o != que devuelve NULL si los dos argumentos son iguales NULLIF en Microsoft Docs. Así que creo que DONDE la cláusula se puede modificar para <> y != de la siguiente manera:

NULLIF(arg1, arg2) IS NOT NULL

Como descubrí, usar <> y != no funciona para date en algunos casos. Por lo tanto, el uso de la expresión anterior hace lo necesario.

 4
Author: jitendrapurohit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-10 10:26:59

Preferí usar != en lugar de <> porque a veces uso la sintaxis <s></s> para escribir comandos SQL. Usar != es más útil para evitar errores de sintaxis en este caso.

 0
Author: Andrea Antonangeli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-10 17:57:49

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 tomó alrededor de 16 segundos en promedio para ejecutarse. Los cambié a <> y la consulta ahora tarda unos 4 segundos en ejecutarse en promedio. Eso es una gran mejora!

 -4
Author: Hamlet Javier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 16:43:18

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 cuando factorice sus índices para 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 atajo y hacer que funcionan de la misma manera, por lo que no hay ningún beneficio de cualquier manera. PostgreSQL y SQL Server no acortan esto; se lee como aparece arriba.

 -9
Author: Kevin Kinchen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 16:44:59