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

Operador SQL IN para principiantes

En SQL, el IN El operador le permite filtrar los resultados de su consulta en función de una lista de valores.

También puede usarlo para hacer coincidir cualquier valor devuelto por una subconsulta (una subconsulta es una consulta anidada dentro de otra consulta).

Tablas de origen

Las siguientes tablas se utilizan para los ejemplos de esta página.

SELECT * FROM PetTypes;
SELECT * FROM Pets;

Resultado:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
| 4           | Rabbit    |
+-------------+-----------+
(4 rows affected)
+---------+-------------+-----------+-----------+------------+
| 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

Aquí hay un ejemplo para demostrar el IN operador.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

Resultado:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 4       | Wag       | 2020-03-15 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Podríamos lograr el mismo resultado usando dos OR operadores:

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' 
    OR PetName = 'Bark' 
    OR PetName = 'Wag';

Sin embargo, el IN operator es una forma más concisa de hacerlo. El IN El operador es especialmente beneficioso cuando tiene una larga lista de valores con los que comparar.

El IN operador casi siempre se ejecuta más rápido que múltiples OR operadores, especialmente en conjuntos de datos más grandes.

Valores numéricos

Los valores no se limitan solo a cadenas. Por ejemplo, puede usar IN en una lista de valores numéricos.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetId IN (1, 3, 5);

Resultado:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 3       | Scratch   | 2018-10-01 |
| 5       | Tweet     | 2020-11-28 |
+---------+-----------+------------+

Fechas

Aquí hay un ejemplo que usa una lista de fechas.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE DOB IN (
    '2020-11-20', 
    '2018-10-01', 
    '2015-10-01'
    );

Resultado:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 3       | Scratch   | 2018-10-01 |
+---------+-----------+------------+

Usando IN con subconsultas

Otro beneficio del IN operador, es que puede contener otro SELECT lista. Esto se conoce como una subconsulta . Una subconsulta es una consulta anidada dentro de otra consulta (o incluso otra subconsulta).

He aquí un ejemplo.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Resultado:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Este ejemplo nos muestra cuántos tipos de mascotas hay en nuestro hotel para mascotas.

Usando NOT IN

Podríamos agregar el NOT operador para cambiar esto y ver cuántos tipos de mascotas no en nuestro hotel para mascotas.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );

Resultado:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

En este caso, nuestra base de datos contiene un tipo de mascota de Rabbit , pero actualmente no tenemos conejos como mascotas.

Expresiones

Los valores proporcionados son una lista de expresiones. Por lo tanto, puedes hacer cosas como esta:

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetId IN (1, 3, 2 + 3);

Resultado:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 3       | Scratch   | 2018-10-01 |
| 5       | Tweet     | 2020-11-28 |
+---------+-----------+------------+