Database
 sql >> Base de données >  >> RDS >> Database

Opérateur SQL IN pour les débutants

En SQL, le IN L'opérateur vous permet de filtrer les résultats de votre requête en fonction d'une liste de valeurs.

Vous pouvez également l'utiliser pour faire correspondre toute valeur renvoyée par une sous-requête (une sous-requête est une requête imbriquée dans une autre requête).

Tableaux sources

Les tableaux suivants sont utilisés pour les exemples sur cette page.

SELECT * FROM PetTypes;
SELECT * FROM Pets;

Résultat :

+-------------+-----------+
| 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)

Exemple

Voici un exemple pour démontrer le IN opérateur.

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

Résultat :

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

Nous pourrions obtenir le même résultat en utilisant deux OR opérateurs :

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

Cependant, le IN L'opérateur est une manière plus concise de le faire. Le IN L'opérateur est particulièrement utile lorsque vous disposez d'une longue liste de valeurs à comparer.

Le IN l'opérateur s'exécute presque toujours plus rapidement que plusieurs OR opérateurs, en particulier sur les grands ensembles de données.

Valeurs numériques

Les valeurs ne sont pas limitées aux chaînes. Par exemple, vous pouvez utiliser IN sur une liste de valeurs numériques.

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

Résultat :

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

Dates

Voici un exemple qui utilise une liste de dates.

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

Résultat :

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

Utiliser IN avec des sous-requêtes

Un autre avantage du IN opérateur, est qu'il peut contenir un autre SELECT liste. C'est ce qu'on appelle une sous-requête . Une sous-requête est une requête imbriquée dans une autre requête (ou même une autre sous-requête).

Voici un exemple.

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

Résultat :

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

Cet exemple nous montre combien de types d'animaux se trouvent dans notre hôtel pour animaux de compagnie.

Utiliser NOT IN

Nous pourrions ajouter le NOT opérateur pour retourner cela et voir combien de types d'animaux ne sont pas dans notre hôtel pour animaux de compagnie.

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

Résultat :

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

Dans ce cas, notre base de données contient un animal de compagnie de type Rabbit , mais nous n'avons actuellement aucun lapin comme animal de compagnie.

Expressions

Les valeurs fournies sont une liste d'expressions. Par conséquent, vous pouvez faire des choses comme ceci :

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

Résultat :

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