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

Operador SQL no igual a () para principiantes

En SQL, el operador distinto de (<> ) 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 de origen

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 Pets;

Resultado:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)

Ejemplo

Si quisiéramos obtener todas las mascotas que no tiene un propietario determinado, podríamos hacer esto:

SELECT *
FROM Pets
WHERE OwnerId <> 3;

Resultado:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Nuestra consulta utiliza el operador no igual a (<> ) para probar si el OwnerId la columna no es igual a 3 . La consulta devuelve todas las mascotas que no tienen el propietario número 3 como propietario.

Cuerdas

Al comparar con un valor de cadena, use comillas alrededor de la cadena. Por ejemplo, si quisiéramos obtener información sobre todas las mascotas que no se llaman Fluffy, podríamos hacer lo siguiente:

SELECT *
FROM Pets
WHERE PetName <> 'Fluffy';

Resultado:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Múltiples Condiciones

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

Así:

SELECT * FROM Pets 
WHERE OwnerId <> 1 AND OwnerId <> 3;

Resultado:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

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 igual a (= ) operador:

SELECT *
FROM Pets
WHERE NOT PetName <> 'Fluffy';

Resultado:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

En este caso, es mejor usar el igual a (= ) operador, así:

SELECT *
FROM Pets
WHERE PetName = 'Fluffy';

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

SELECT *
FROM Pets
WHERE NOT PetName = 'Fluffy';

Valores NULOS

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

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 la columna DOB con NULL .

SELECT * FROM Pets 
WHERE DOB <> 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 Pets 
WHERE DOB IS NOT NULL;

Resultado:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

Ahora obtenemos solo aquellas filas que no son NULL en el DOB 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.