CodeGym /Cours /SQL SELF /C'est quoi les requêtes imbriquées et pourquoi on en a be...

C'est quoi les requêtes imbriquées et pourquoi on en a besoin ?

SQL SELF
Niveau 13 , Leçon 0
Disponible

Maintenant t'es prêt pour l'étape suivante — bosser avec les requêtes imbriquées en SQL. Aujourd'hui, on va voir ce que c'est, pourquoi c'est utile, quels types de requêtes imbriquées existent et pourquoi c'est vraiment pratique dans la vraie vie.

Les requêtes imbriquées (ou sous-requêtes) — ce sont des requêtes SQL qu'on utilise à l'intérieur d'autres requêtes SQL. Genre une poupée russe ou un oignon : t'as une requête principale, et dedans y'en a une autre, plus petite, cachée. La sous-requête s'exécute en premier, et son résultat est utilisé par la requête principale (parfois on l'appelle "requête principale").

Voyons ça avec un exemple :

Exemple 1 : Comment ça marche

On a une table students avec les données suivantes :

id nom âge groupe_id
1 Alisa 20 1
2 Bob 22 2
3 Klark 21 1
4 Dina 23 3
5 Emilia 22 2

Et aussi une table groups, où on stocke les infos sur les noms des groupes :

id nom_du_groupe
1 Classe mathématique
2 Classe physique
3 Classe littéraire

Si on veut savoir les noms des groupes où étudient les étudiants, on peut utiliser une requête imbriquée :

SELECT nom_du_groupe
FROM groups 
WHERE id IN (
    SELECT groupe_id 
    FROM students 
    WHERE âge > 21
);

Qu'est-ce qui se passe ici ?

La sous-requête :

SELECT groupe_id 
FROM students 
WHERE âge > 21

Cette requête sélectionne groupe_id de tous les étudiants de plus de 21 ans. Résultat : une liste d'identifiants de groupes, par exemple [2, 3].

La requête principale :

SELECT nom_du_groupe 
FROM groups 
WHERE id IN ([résultats de la sous-requête])

Cette requête utilise les résultats de la sous-requête et renvoie les noms des groupes avec id égal à 2 ou 3.

Résultat :

Classe physique
Classe littéraire

Tu piges toujours rien ? C'est normal. Mais t'inquiète, on va tout décortiquer maintenant.

On commence avec une idée simple — le résultat d'une requête SELECT — c'est une sorte de table virtuelle. Franchement, elle a des colonnes, elle a des lignes. Pourquoi pas une table ?

Et si le résultat d'une requête est une table, tu peux l'utiliser là où tu utilises des vraies tables : dans un JOIN par exemple, ou dans des constructions plus complexes.

Elle n'a pas de nom, et c'est un souci. Mais les colonnes-expressions n'ont pas de noms non plus, et on règle ça en leur donnant un alias — un pseudo. Tu peux faire pareil avec les tables virtuelles.

On verra ça plus en détail dans les prochaines leçons — pas de spoil ici :P

Pourquoi les requêtes imbriquées sont utiles

  1. Elles simplifient les tâches compliquées. Parfois, une seule table n'a pas toutes les infos dont t'as besoin. Les sous-requêtes te permettent de diviser la requête en deux étapes : d'abord tu trouves un résultat intermédiaire, puis tu l'utilises pour choper les données finales.

  2. Travailler avec des résultats intermédiaires. Les requêtes imbriquées sont utiles quand tu dois faire des calculs en plus avant de traiter les données. Genre trouver la valeur minimale ou calculer une somme.

  3. Améliorer la lisibilité du code. Les requêtes imbriquées rendent le code plus structuré, surtout si tu bosses avec de grosses tables et une logique compliquée.

Les principaux types de requêtes imbriquées

Tu peux utiliser les requêtes imbriquées à différents endroits dans une requête SQL. Selon où tu les mets, il y a plusieurs types.

  1. Sous-requêtes dans SELECT. La sous-requête est dans la liste des colonnes et sert à calculer des valeurs. C'est pratique, par exemple, pour ajouter une nouvelle colonne dans les résultats.

Exemple — on ajoute une colonne avec l'âge max parmi les étudiants :

SELECT nom, âge,
       (SELECT MAX(âge) FROM students) AS âge_max 
FROM students;

Résultat :

nom âge âge_max
Alisa 20 23
Bob 22 23
Klark 21 23
Dina 23 23
Emilia 22 23
  1. Sous-requêtes dans FROM. La sous-requête est utilisée comme une table temporaire. C'est utile si tu dois d'abord agréger ou transformer les données.

Exemple — calculer l'âge moyen des étudiants dans chaque groupe :

SELECT tmp.groupe_id, tmp.âge_moyen
FROM (
    SELECT groupe_id, AVG(âge) AS âge_moyen
    FROM students
    GROUP BY groupe_id
) AS tmp -- On donne le pseudo tmp à la table temporaire 
WHERE tmp.âge_moyen > 21;

Résultat :

groupe_id âge_moyen
2 22.0
3 23.0
  1. Sous-requêtes dans WHERE et HAVING. Les sous-requêtes peuvent servir de condition pour filtrer les lignes. C'est souvent utilisé pour vérifier
  2. l'existence d'enregistrements ou pour comparer des valeurs.

Exemple — les étudiants qui sont plus âgés que la moyenne :

SELECT nom, âge
FROM students
WHERE âge > (
    SELECT AVG(âge) 
    FROM students
);

Résultat :

nom âge
Bob 22
Dina 23
Emilia 22

Les avantages d'utiliser les requêtes imbriquées

Plus de flexibilité : les requêtes imbriquées te permettent de bosser avec des structures de données plus complexes.

Découper les tâches en étapes : tu peux séparer la logique en sous-requêtes, ce qui rend le code plus lisible.

Accès aux données intermédiaires : tu peux traiter les données "à la volée", sans avoir besoin de créer des tables temporaires dans la base de données.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION