Les mots clés IN et NOT IN
Notions théoriques
En SQL, les mots clés IN et NOT IN sont utilisés pour vérifier si une valeur se trouve dans une liste de valeurs ou non.
IN: Si la valeur est présente dans la liste, la condition est vraie.NOT IN: Si la valeur n'est pas présente dans la liste, la condition est vraie.
Ces opérateurs sont souvent utilisés dans la clause WHERE pour filtrer les résultats en fonction d'une liste de valeurs.
Exemple pratique
Imaginons que nous voulons trouver tous les livres écrits par les auteurs 'Verne', 'Hugo' et 'Corneille'.
Nous pouvons utiliser l'opérateur IN pour cela :
SELECT titre
FROM livres
JOIN auteurs ON livres.idauteur = auteurs.idauteur
WHERE auteurs.nom IN ('Verne', 'Hugo', 'Corneille');
N'oubliez pas, la pratique est la clé pour maîtriser une nouvelle compétence.
Testez vous même les requêtes ;-)
Inversement, si nous voulons trouver tous les livres qui n'ont pas été écrits par ces auteurs, nous pouvons utiliser NOT IN :
SELECT titre
FROM livres
JOIN auteurs ON livres.idauteur = auteurs.idauteur
WHERE auteurs.nom NOT IN ('Verne', 'Hugo', 'Corneille');
Test de mémorisation/compréhension
TP n°1
Télécharger le fichier 'cdi.sql' - Télécharger le MCD

Dans ce TP, vous allez utiliser les opérateurs
INetNOT INpour résoudre un problème.
Votre mission est de trouver*, parmi les données de la base bibliotheque,*
le nom de tous les auteurs qui ont écrit plus d'un livre
et qui ne sont pas dans la liste des auteurs 'Verne', 'Hugo' et 'Corneille'.
Pour chaque enregistrement, nous souhaitons afficher le nom de l'auteur et le nombre de livres qu'il a écrit.
WHERE nom IN ('A', 'B', 'C') est équivalent à WHERE nom = 'A' OR nom = 'B' OR nom = 'C'.
Préférez IN dès que la liste contient plus de 2 valeurs : c'est plus lisible et moins sujet aux erreurs.
NOT IN peut aussi s'écrire avec une sous-requête : WHERE nom NOT IN (SELECT nom FROM auteurs_exclus).
TP n°2

Votre mission est de trouver*, parmi les données de la base bibliotheque,*
le titre de tous les livres de Victor Hugo, Jules Verne ou Zola.
C'est à dire dont les auteurs sont dans la liste 'Hugo', 'Verne' ou 'Zola'.
Pour chaque enregistrement, nous souhaitons afficher le le nom de l'auteur et le titre du livre.
Lorsqu'on filtre sur une valeur d'une table jointe (ici auteurs.nom),
la clause WHERE s'applique après le JOIN. L'ordre logique est :
FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.
Mémoriser cet ordre aide à écrire des requêtes sans erreur.
Une solution
Vous devez être connecté pour voir le contenu.