Cours SQL et MySQL · Module 8: Sous-requêtes
La sous-requête dans la clause FROM
Dans cette leçon3
Le couloir suivant nous mène aux tables dérivées. Cette fois, la sous-requête n'atterrira pas dans WHERE, mais dans la clause FROM - et elle servira de matériau tout prêt dans lequel puisera ensuite la requête externe.
Table dérivée (sous-requête dans FROM)
Une sous-requête placée dans FROM se comporte comme une table temporaire - nous l'appelons une table dérivée. Dans MySQL, elle doit recevoir un alias :
1SELECT AVG(liczba) AS srednia_ksiazek
2FROM (
3 SELECT autor_id, COUNT(*) AS liczba
4 FROM ksiazki
5 GROUP BY autor_id
6) AS zestawienie;La requête interne compte les livres de chaque auteur. La requête externe traite ce résultat comme une table ordinaire (zestawienie) et en calcule la moyenne. Sans l'alias AS zestawienie, la Bibliothèque signale une erreur.
Pourquoi une table dérivée ?
Une table dérivée te permet de préparer d'abord les données, puis seulement de les traiter davantage. Nous l'utilisons le plus souvent quand nous voulons :
- calculer un agrégat à partir d'un autre agrégat (par exemple la moyenne de compteurs),
- filtrer le résultat d'un regroupement puis le traiter davantage,
- donner des noms temporaires à des colonnes référencées par la requête externe.
N'oublie pas l'alias
Dans MySQL, chaque table dérivée doit avoir un alias - même si la requête externe ne l'utilise pas. Un alias oublié est l'erreur la plus fréquente dans ce couloir. Donnes-en toujours un, par exemple AS zestawienie ou AS t.
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. Qu'est-ce qu'une table dérivée et qu'exige-t-elle dans MySQL ?
2. Que se passe-t-il dans MySQL si une table dérivée de la clause FROM ne reçoit pas d'alias ?
Tâches pratiques dans le jeu
- Tri vertical
Ordonne (de haut en bas) les lignes de la requête qui calcule le nombre moyen de livres par auteur à partir d'une table dérivée :
- Éditeur de code
Écris une requête qui calcule le nombre moyen (AVG) de livres par auteur. Dans la clause FROM, place une sous-requête qui renvoie autor_id et COUNT(*) AS liczba depuis la table ksiazki, regroupée par autor_id. Donne à cette table dérivée l'alias zestawienie. Dans la requête externe, calcule AVG(liczba).