sql >> Base de Datos >  >> RDS >> Database

Operador SQL no igual a (!=) para principiantes

En SQL, el operador no es igual a (!= ) compara la no igualdad de dos expresiones. Es decir, prueba si una expresión es no igual a otra expresión.

Si uno o ambos operandos son NULL , NULL es devuelto.

SQL también tiene otro operador no igual a (<> ), que hace lo mismo. El que use puede depender de su DBMS, con cuál se sienta más cómodo y quizás también si su organización tiene alguna convención de codificación que dicte cuál debe usarse.

Tabla fuente

Imagine que nuestra base de datos contiene la siguiente tabla. Esta es la tabla que usaremos para los ejemplos de esta página.

SELECT * FROM Owners;

Resultado:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Simpson    | (489) 591-0408 | NULL              |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Ejemplo

Si quisiéramos devolver una lista de todos los propietarios que no tienen un OwnerId de 3 , podríamos hacer esto:

SELECT *
FROM Owners
WHERE OwnerId != 3;

Resultado:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Nuestra consulta utiliza el operador no igual a (!= ) para probar si el OwnerId la columna no es igual a 3 . La consulta devuelve todos los propietarios excepto el propietario número 3.

Cadenas

Al comparar con un valor de cadena, use comillas alrededor de la cadena. Por ejemplo, si quisiéramos obtener información sobre todos los propietarios cuyo primer nombre no es Homer, podríamos hacer lo siguiente:

SELECT *
FROM Owners
WHERE FirstName != 'Homer';

Resultado:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Simpson    | (489) 591-0408 | NULL              |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Condiciones Múltiples

Si tiene varias condiciones, puede usar varios operadores (ya sean los mismos operadores o diferentes).

Así:

SELECT * FROM Owners 
WHERE OwnerId != 1 AND OwnerId != 3;

Resultado:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Una vez que comience a usar más condiciones, debe usar paréntesis para rodear las condiciones que desea que se evalúen primero. Si no hace esto, es posible que obtenga resultados inesperados debido a que las condiciones se evalúan en un orden que no pretendía.

Negar la Condición

Si usa el NOT operador para negar la condición proporcionada por el operador no igual a, terminará obteniendo los resultados de los iguales (= ) operador:

SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';

Resultado:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
+-----------+-------------+------------+----------------+-------------------+

En este caso, es mejor que utilices los iguales (= ) operador, así:

SELECT *
FROM Owners
WHERE FirstName = 'Homer';

Por supuesto, esto mismo podría negarse con el NOT operador, que nos daría el mismo resultado que el no igual a (!= ) el operador nos da:

SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';

Valores NULOS

Es posible que haya notado que nuestra tabla de muestra original contiene un par de NULL valores en el Email columna.

Una columna que contiene NULL significa que no tiene valor. Esto es diferente a 0 o false , o incluso una cadena vacía.

No puede usar el operador no igual a para comparar con NULL . En realidad, esto puede depender de su DBMS y su configuración. Pero por ahora, veamos qué sucede si trato de comparar el Email columna a NULL .

SELECT * FROM Owners 
WHERE Email != NULL;

Resultado:

(0 rows affected)

La forma de probar no NULL valores es usar IS NOT NULL .

Por lo tanto, necesitaríamos reescribir la declaración anterior de la siguiente manera.

SELECT * FROM Owners 
WHERE Email IS NOT NULL;

Resultado:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Ahora obtenemos solo aquellas filas que no son NULL en el Email columna.

Si está interesado, consulte SQL Server ANSI_NULLS Explained para ver cómo puedes cambiar la forma NULL los valores se tratan en SQL Server.