PaliSkill
SQL Intermédiaire

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