Sous-requêtes
Nous allons maintenant apprendre à imbriquer plusieurs requêtes, ce qui vous permettra de faire en une seule fois ce qui vous
aurait, jusqu'ici, demandé plusieurs étapes.
Une sous-requête est une requête à l'intérieur d'une autre requête. Avec le SQL, vous pouvez construire des requêtes
imbriquées sur autant de niveaux que vous voulez. Vous pouvez également mélanger jointures et sous-requêtes. Tant que votre
requête est correctement structurée, elle peut être aussi complexe que vous voulez.
Une sous-requête peut être faite dans une requête de type SELECT, INSERT, UPDATE ou DELETE (et quelques autres que
nous n'avons pas encore vues). Nous ne verrons dans ce chapitre que les requêtes de sélection. Les jointures et sous-requêtes
pour la modification, l'insertion et la suppression de données étant traitées dans le prochain chapitre.
La plupart des requêtes de sélection que vous allez voir dans ce chapitre sont tout à fait réalisables autrement, souvent avec une
jointure. Certains préfèrent les sous-requêtes aux jointures parce que c'est légèrement plus clair comme syntaxe, et peut-être plus
intuitif. Il faut cependant savoir qu'une jointure sera toujours au moins aussi rapide que la même requête faite avec une sousrequête. Par conséquent, s'il est important pour vous d'optimiser les performances de votre application, utilisez plutôt des
jointures lorsque c'est possible.
Sous-requêtes dans le FROM
Lorsque l'on fait une requête de type SELECT, le résultat de la requête nous est envoyé sous forme de table. Et grâce aux sousrequêtes, il est tout à fait possible d'utiliser cette table et de refaire une recherche uniquement sur les lignes de celle-ci.
Exemple : on sélectionne toutes les femelles parmi les perroquets et les tortues .
Code : SQL
SELECT Animal.id, Animal.sexe, Animal.date_naissance, Animal.nom,
Animal.espece_id
FROM Animal
INNER JOIN Espece
ON Espece.id = Animal.espece_id
WHERE sexe = 'F'
AND Espece.nom_courant IN ('Tortue d''Hermann', 'Perroquet
amazone');
id sexe date_naissance
nom
espece_id
4 F
2009-08-03 05:12:00 NULL
3
6 F
2009-06-13 08:17:00 Bobosse 3
45 F
2007-04-01 18:17:00 Nikki
3
46 F
2009-03-24 08:23:00 Tortilla
3
47 F
2009-03-26 01:24:00 Scroupy 3
48 F
2006-03-15 14:56:00 Lulla
3
49 F
2008-03-15 12:02:00 Dana
3
50 F
2009-05-25 19:57:00 Cheli
3
51 F
2007-04-01 03:54:00 Chicaca 3
52 F
2006-03-15 14:26:00 Redbul 3
60 F
2009-03-26 07:55:00 Parlotte 4
Parmi ces femelles perroquets et tortues, on veut connaître la date de naissance de la plus âgée. On va donc faire une sélection
dans la table des résultats de la requête.
Code : SQL
Partie 2 : Index, jointures et sous-requêtes
113/414
www.openclassrooms.com
Nous allons maintenant apprendre à imbriquer plusieurs requêtes, ce qui vous permettra de faire en une seule fois ce qui vous
aurait, jusqu'ici, demandé plusieurs étapes.
Une sous-requête est une requête à l'intérieur d'une autre requête. Avec le SQL, vous pouvez construire des requêtes
imbriquées sur autant de niveaux que vous voulez. Vous pouvez également mélanger jointures et sous-requêtes. Tant que votre
requête est correctement structurée, elle peut être aussi complexe que vous voulez.
Une sous-requête peut être faite dans une requête de type SELECT, INSERT, UPDATE ou DELETE (et quelques autres que
nous n'avons pas encore vues). Nous ne verrons dans ce chapitre que les requêtes de sélection. Les jointures et sous-requêtes
pour la modification, l'insertion et la suppression de données étant traitées dans le prochain chapitre.
La plupart des requêtes de sélection que vous allez voir dans ce chapitre sont tout à fait réalisables autrement, souvent avec une
jointure. Certains préfèrent les sous-requêtes aux jointures parce que c'est légèrement plus clair comme syntaxe, et peut-être plus
intuitif. Il faut cependant savoir qu'une jointure sera toujours au moins aussi rapide que la même requête faite avec une sousrequête. Par conséquent, s'il est important pour vous d'optimiser les performances de votre application, utilisez plutôt des
jointures lorsque c'est possible.
Sous-requêtes dans le FROM
Lorsque l'on fait une requête de type SELECT, le résultat de la requête nous est envoyé sous forme de table. Et grâce aux sousrequêtes, il est tout à fait possible d'utiliser cette table et de refaire une recherche uniquement sur les lignes de celle-ci.
Exemple : on sélectionne toutes les femelles parmi les perroquets et les tortues .
Code : SQL
SELECT Animal.id, Animal.sexe, Animal.date_naissance, Animal.nom,
Animal.espece_id
FROM Animal
INNER JOIN Espece
ON Espece.id = Animal.espece_id
WHERE sexe = 'F'
AND Espece.nom_courant IN ('Tortue d''Hermann', 'Perroquet
amazone');
id sexe date_naissance
nom
espece_id
4 F
2009-08-03 05:12:00 NULL
3
6 F
2009-06-13 08:17:00 Bobosse 3
45 F
2007-04-01 18:17:00 Nikki
3
46 F
2009-03-24 08:23:00 Tortilla
3
47 F
2009-03-26 01:24:00 Scroupy 3
48 F
2006-03-15 14:56:00 Lulla
3
49 F
2008-03-15 12:02:00 Dana
3
50 F
2009-05-25 19:57:00 Cheli
3
51 F
2007-04-01 03:54:00 Chicaca 3
52 F
2006-03-15 14:26:00 Redbul 3
60 F
2009-03-26 07:55:00 Parlotte 4
Parmi ces femelles perroquets et tortues, on veut connaître la date de naissance de la plus âgée. On va donc faire une sélection
dans la table des résultats de la requête.
Code : SQL
Partie 2 : Index, jointures et sous-requêtes
113/414
www.openclassrooms.com
