Leçon 2 / 9 — Chapitre 3: Sous-requêtes
Sous-requête corrélée vs non corrélée
Les deux sous-requêtes de la leçon précédente sont non corrélées : elles s'exécutent indépendamment de la ligne en cours, une seule fois, quel que soit le produit examiné. Une sous-requête corrélée fait l'inverse : elle référence une colonne de la requête externe, et son résultat dépend donc de la ligne en cours d'examen.
SELECT p.nom
FROM produits p
WHERE p.prix > (
SELECT AVG(prix) FROM produits WHERE categorie = p.categorie
);
Ici, p.categorie dans la sous-requête référence la table externe p : pour chaque produit, la sous-requête recalcule la moyenne de sa propre catégorie, pas la moyenne générale.
Moyennes par catégorie : papeterie = (500+100)/2 = 300, hygiène = (300+500)/2 = 400, boisson = 600 (Jus seul), alimentaire = 400 (Biscuits seul). Comparaison produit par produit : Cahier (500 > 300) ✓, Stylo (100 > 300) ✗, Savon (300 > 400) ✗, Jus (600 > 600) ✗ — pas strictement supérieur à sa propre moyenne —, Biscuits (400 > 400) ✗, Dentifrice (500 > 400) ✓. Résultat : Cahier et Dentifrice, soit 2 lignes.
À retenir :
- Une sous-requête non corrélée s'exécute une seule fois, indépendamment de la ligne externe examinée.
- Une sous-requête corrélée référence une colonne de la requête externe (ici
p.categorie) : conceptuellement, elle se réévalue pour chaque ligne externe. - Un produit seul dans sa catégorie est toujours égal à sa propre moyenne : il ne peut jamais la dépasser strictement.
À vous de jouer : sur ces mêmes données, un produit peut-il un jour apparaître dans ce résultat s'il est seul dans sa catégorie ? Justifiez.
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 80 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès