Avancé · 30 min
Sous-requêtes : placer une requête dans une autre
Parfois on a besoin d'une valeur qui depend d'un calcul precedent (la moyenne generale pour comparer chaque etudiant, le max des notes pour trouver les meilleurs).
Contexte
Parfois on a besoin d'une valeur qui depend d'un calcul precedent (la moyenne generale pour comparer chaque etudiant, le max des notes pour trouver les meilleurs). La sous-requête permet de calculer cette valeur dans la même requete.
Explication
Une sous-requête est une requete imbriquee dans une autre.
Types :
- Sous-requête scalaire : retourne une valeur unique (dans WHERE, SELECT, HAVING)
- Sous-requête avec IN : retourne une liste de valeurs
- Sous-requête corrélée : reference une colonne de la requete externe (execute une fois par ligne)
Syntaxe (scalaire dans WHERE) : SELECT ... FROM t WHERE colonne > (SELECT AVG(colonne) FROM t);
Syntaxe (IN) : SELECT ... FROM t WHERE id IN (SELECT id FROM t2 WHERE 조건);
Exemple guidé
Objectif : trouver les etudiants au-dessus de la moyenne generale.
1. Calculer la moyenne generale dans une sous-requête 2. Comparer chaque moyenne d'etudiant a ce seuil 3. La sous-requête est independante (non corrélee)
SELECT e.prenom, e.nom, ROUND(AVG(n.note), 2) AS moyenne
FROM etudiants e
INNER JOIN notes n ON n.etudiant_id = e.id
GROUP BY e.id, e.prenom, e.nom
HAVING AVG(n.note) > (SELECT AVG(note) FROM notes)
ORDER BY moyenne DESC;
| prenom | nom | moyenne |
|---|---|---|
| Pape | Diouf | 13.17 |
| Fatou | Sarr | 13.0 |
| Khadija | Ba | 12.83 |
| Aminata | Sow | 12.63 |
À retenir
Sous-requête scalaire = une valeur unique, utilisée dans WHERE, SELECT ou HAVING. Sous-requête avec IN = liste de valeurs. Sous-requête corrélée = reference la requete externe, execute par ligne. Attention : la sous-requête doit retourner le bon nombre de colonnes/valeurs selon le contexte.