XamSQL — la salle de sport SQL des francophones

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 :

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;
prenomnommoyenne
PapeDiouf13.17
FatouSarr13.0
KhadijaBa12.83
AminataSow12.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.

Exercices de cette leçon

Faire les exercices →