Cours SQL et MySQL · Module 8: Sous-requêtes
La sous-requête scalaire dans WHERE
Dans cette leçon3
Le premier couloir du Labyrinthe est le plus simple. Une sous-requête scalaire est celle qui renvoie exactement une valeur - une ligne et une colonne. Grâce à cela, nous pouvons l'utiliser partout où SQL attend un seul nombre ou un seul morceau de texte.
Comparer avec la moyenne
Le plus souvent, nous la plaçons dans la clause WHERE pour comparer chaque ligne au résultat d'un calcul :
1SELECT tytul, cena
2FROM ksiazki
3WHERE cena > (SELECT AVG(cena) FROM ksiazki);La sous-requête (SELECT AVG(cena) FROM ksiazki) renvoie un seul nombre - le prix moyen. La requête externe compare le prix de chaque livre à cette valeur et ne garde que ceux qui dépassent la moyenne.
Autres fonctions d'agrégation
Des fonctions comme MAX, MIN, COUNT fonctionnent à merveille dans une sous-requête scalaire :
1SELECT tytul
2FROM ksiazki
3WHERE rok_wydania = (SELECT MAX(rok_wydania) FROM ksiazki);Cette requête trouve le livre le plus récent de la Bibliothèque - celui dont l'année de publication est la plus grande. Si nous voulions le plus ancien, nous utiliserions MIN au lieu de MAX.
Attention à la règle du scalaire
Une sous-requête scalaire doit renvoyer une seule valeur. Si elle renvoyait plusieurs lignes et que nous utilisions l'opérateur = ou >, la Bibliothèque protesterait par une erreur. Si tu attends plusieurs résultats - tu auras besoin de l'opérateur IN, que tu rencontreras dans le prochain couloir.
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. Que renvoie une sous-requête scalaire telle que (SELECT AVG(cena) FROM ksiazki) ?
2. Quelle fonction d'agrégation, dans une sous-requête scalaire, renvoie l'année de publication la plus récente d'un livre ?
Tâches pratiques dans le jeu
- Éditeur de code
Écris une requête qui récupère dans la table ksiazki toutes les colonnes des livres dont le prix est supérieur au prix moyen (AVG) de tous les livres. Calcule la moyenne dans une sous-requête.
- Tri horizontal
Ordonne sur une ligne (de gauche à droite) le début de la condition qui compare le prix avec la moyenne d'une sous-requête :
- Éditeur de code
Écris une requête qui récupère dans la table ksiazki la colonne tytul des livres dont le rok_wydania est égal à l'année de publication la plus élevée (MAX) de la table. Calcule le maximum dans une sous-requête.