Cours SQL et MySQL · Module 8: Sous-requêtes

La sous-requête avec l'opérateur IN

2 min de lecture
Dans cette leçon3

Que faisons-nous quand une sous-requête renvoie plusieurs lignes ? Nous ne pouvons alors pas les comparer avec un simple =. L'opérateur IN vient à la rescousse - il vérifie si une valeur figure dans la liste renvoyée par la sous-requête.

Une valeur dans la liste

1SELECT tytul
2FROM ksiazki
3WHERE autor_id IN (SELECT id FROM autorzy WHERE kraj = 'Polska');

La sous-requête renvoie d'abord la liste des id de tous les auteurs venus de Pologne. La requête externe choisit ensuite les livres dont l'autor_id figure dans cette liste. Ainsi, une seule requête relie deux rayons : ksiazki et autorzy.

Plus propre qu'à la main

Sans sous-requête, il faudrait d'abord noter les id des auteurs polonais, puis les coller manuellement dans la requête :

1SELECT tytul FROM ksiazki WHERE autor_id IN (1, 4, 7);

La sous-requête fait cela pour nous - et met à jour la liste elle-même dès qu'un nouvel auteur arrive à la Bibliothèque.

NOT IN

L'opérateur NOT IN fonctionne à l'inverse - il choisit les lignes dont la valeur n'est pas dans la liste :

1SELECT tytul
2FROM ksiazki
3WHERE kategoria_id NOT IN (SELECT id FROM kategorie WHERE nazwa = 'Poezja');

C'est ainsi que nous trouvons tous les livres en dehors du rayon de poésie.

Tu as repéré une erreur dans cette leçon ?

Teste tes connaissances

Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.

  1. 1. À quoi sert l'opérateur IN combiné à une sous-requête ?

  2. 2. Que va sélectionner la condition kategoria_id NOT IN (SELECT id FROM kategorie WHERE nazwa = 'Poezja') ?

Tâches pratiques dans le jeu

  • Éditeur de code

    Écris une requête qui récupère dans la table ksiazki la colonne tytul des livres dont l'autor_id figure dans la liste des identifiants d'auteurs de la table autorzy venant du pays 'Polska'. Utilise l'opérateur IN et une sous-requête.

  • Tri vertical

    Ordonne (de haut en bas) les lignes de la requête qui récupère les livres d'auteurs venant de Grèce à l'aide de IN et d'une sous-requête :

  • Éditeur de code

    Écris une requête qui récupère dans la table ksiazki toutes les colonnes des livres dont l'autor_id figure dans la liste des identifiants d'auteurs de la table autorzy venant du pays 'Grecja'. Utilise l'opérateur IN et une sous-requête.

  • Clique dans l'ordre

    Clique sur les éléments dans l'ordre pour construire une condition avec l'opérateur IN et une sous-requête (une seule ligne) :

  • Éditeur de code

    Écris une requête qui récupère dans la table ksiazki la colonne tytul des livres dont le kategoria_id ne figure PAS dans la liste des identifiants de catégorie nommée 'Poezja' de la table kategorie. Utilise l'opérateur NOT IN et une sous-requête.