SQL ET POSTGRE 5.30 : Data restriction and output with IN and NOT IN

Jusqu'ici, nous avons sélectionné des données dont une colonne était égale à une valeur unique. Mais comment faire pour récupérer les lignes dont une colonne correspond à plusieurs valeurs possibles ? L'opérateur IN répond exactement à ce besoin. Par exemple, pour afficher les acteurs prénommés Bruce, on écrit SELECT prenom, nom FROM acteur WHERE prenom = 'Bruce'; et on récupère Bruce Lee, Bruce Willis et les autres. Mais si on veut aussi inclure les John, écrire WHERE prenom = 'Bruce' OR prenom = 'John' fonctionne mais devient lourd avec beaucoup de valeurs.

L'opérateur IN et son inverse NOT IN

La syntaxe propre consiste à remplacer le signe égal par IN suivi d'une liste entre parenthèses, chaque valeur séparée par une virgule :

SELECT prenom, nom
FROM acteur
WHERE prenom IN ('Bruce', 'John', 'Peter');

On peut ajouter autant de valeurs que nécessaire. La requête renvoie toutes les lignes dont la colonne contient l'une des valeurs listées. Pour faire l'inverse — exclure ces valeurs et garder le reste — on utilise NOT IN. La même requête avec NOT IN à la place de IN retournera tous les acteurs qui ne s'appellent ni Bruce, ni John, ni Peter.

IN et NOT IN fonctionnent également avec les valeurs numériques comme les identifiants entiers. Dans ce cas, on ne met pas d'apostrophes autour des chiffres :

  • WHERE acteur_id IN (1, 2, 3, 4, 5) renvoie les acteurs dont l'identifiant est l'un des cinq premiers
  • WHERE acteur_id NOT IN (1, 2, 3, 4, 5) renvoie tous les autres acteurs
  • Les chaînes de caractères se mettent entre apostrophes simples, les nombres directement

Cet opérateur évite de répéter plusieurs conditions OR et améliore considérablement la lisibilité des requêtes SQL. Dans la prochaine vidéo, nous découvrirons la condition LIKE qui permet de rechercher selon des motifs partiels.

Summary

This lesson explains how to restrict and filter data using the IN and NOT IN SQL operators to select rows matching multiple values at once. Rather than chaining multiple equality conditions, IN allows you to specify a list of target values in parentheses, while NOT IN excludes rows that match any of those values. Both operators work seamlessly with string columns (like actor names) and numeric columns (like ID numbers).

Key points

  • Use the IN operator to select rows where a column matches any value in a specified list (e.g., WHERE firstName IN ('Bruce', 'John', 'Peter'))
  • Use the NOT IN operator to exclude rows matching any value in a list, effectively filtering them out from results
  • IN and NOT IN work with both text and numeric data types; multiple values are separated by commas and enclosed in parentheses
  • IN is cleaner and more readable than chaining multiple OR conditions (e.g., WHERE firstName = 'Bruce' OR firstName = 'John')
  • NOT IN returns all table records except those matching the excluded values, providing an efficient way to filter by exclusion

FAQ

What is the difference between using IN and multiple OR conditions?

Both achieve identical results, but IN is more concise and readable when checking against multiple values. For example, WHERE firstName IN ('Bruce', 'John') is cleaner than WHERE firstName = 'Bruce' OR firstName = 'John'.

Can I use IN and NOT IN with numeric columns like ID numbers?

Yes, both operators work with any data type, including numeric columns. The lesson demonstrates using IN with actor IDs (numeric values such as 1, 2, 3, 4, 5).

What does NOT IN return when applied to a table?

NOT IN returns all rows from the table that do not match any of the specified values, effectively showing every record except those you explicitly excluded.