Les sous-requêtes

Une requête placée dans une autre : sous-requête scalaire, de liste avec IN et ANY, EXISTS et NOT EXISTS, table dérivée dans FROM, sous-requête corrélée ou non, et les pièges de NOT IN avec des NULL.

  • 25 cartes
  • 6 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Les chiffres
  5. Mises en situation
  6. Comprendre

Quelques cartes du deck

  • Sous-requête scalaire : de quoi s'agit-il ?

    Voir la réponse

    Requête SELECT entre parenthèses qui rend une seule colonne et au plus une ligne : le moteur l'emploie comme une valeur, par exemple à droite d'un > ou d'un =.

    duree > (SELECT AVG(duree) FROM film) compare chaque film à une moyenne calculée une seule fois. Si elle rend plusieurs lignes, la base refuse : more than one row returned by a subquery used as an expression.

  • La table film contient Dune (155 min), Alien (117), Amélie (122), Titanic (195), Matrix (136) et Intouchables (112). Quelles lignes rend cette requête ?

    ```sql
    SELECT titre FROM film
    WHERE duree > (SELECT AVG(duree) FROM film);
    `

    • Dune et Titanic
    • Dune, Titanic et Matrix
    • Dune seulement
    • Alien, Amélie et Intouchables
    Voir la réponse

    Dune et Titanic

    La moyenne vaut 837 / 6 = 139,5 minutes. Seuls Dune (155) et Titanic (195) la dépassent ; Matrix, à 136, reste en dessous.

  • Une requête entre parenthèses placée à droite d'un = doit rendre … ; pour en accepter plusieurs, on écrit IN à la place.

    Voir la réponse

    Une requête entre parenthèses placée à droite d'un = doit rendre au plus une ligne ; pour en accepter plusieurs, on écrit IN à la place.

    Sinon la base s'arrête avec more than one row returned by a subquery used as an expression. Avec zéro ligne, la valeur est NULL et la comparaison n'est jamais vraie.

  • Sous-requête de liste : de quoi s'agit-il ?

    Voir la réponse

    Requête entre parenthèses qui rend une colonne de plusieurs lignes, comparée à une valeur avec IN, NOT IN, ANY ou ALL.

    WHERE id IN (SELECT id_client FROM commande) garde les clients dont l'identifiant figure dans la liste. IN équivaut à = ANY, et > ALL veut dire « plus grand que chacune des valeurs ».