SELECT id, sexe, nom, commentaires, espece_id, race_id
FROM Animal
WHERE race_id =
(SELECT id FROM Race WHERE nom = 'Berger Allemand'); -- la
sous-requête renvoie simplement 1
Remarquez que cette requête peut également s'écrire avec une jointure plutôt qu'une sous-requête :
Code : SQL
SELECT Animal.id, sexe, Animal.nom, commentaires, Animal.espece_id,
race_id
FROM Animal
INNER JOIN Race ON Race.id = Animal.race_id
WHERE Race.nom = 'Berger Allemand';
Voici un exemple de requête avec sous-requête qu'il est impossible de faire avec une simple jointure :
Code : SQL
SELECT id, nom, espece_id
FROM Race
WHERE espece_id = (
SELECT MIN(id)
-- Je rappelle que MIN() permet de récupérer
la plus petite valeur de la colonne parmi les lignes sélectionnées
FROM Espece);
id
nom
espece_id
1 Berger allemand
1
2 Berger blanc suisse 1
3 Boxer
1
En ce qui concerne les autres opérateurs de comparaison, le principe est exactement le même :
Code : SQL
SELECT id, nom, espece_id
FROM Race
WHERE espece_id < (
SELECT id
FROM Espece
WHERE nom_courant = 'Tortue d''Hermann');
id
nom
espece_id
1 Berger allemand
1
2 Berger blanc suisse 1
3 Boxer
1
4 Bleu russe
2
5 Maine coon
2
Partie 2 : Index, jointures et sous-requêtes
116/414
www.openclassrooms.com
FROM Animal
WHERE race_id =
(SELECT id FROM Race WHERE nom = 'Berger Allemand'); -- la
sous-requête renvoie simplement 1
Remarquez que cette requête peut également s'écrire avec une jointure plutôt qu'une sous-requête :
Code : SQL
SELECT Animal.id, sexe, Animal.nom, commentaires, Animal.espece_id,
race_id
FROM Animal
INNER JOIN Race ON Race.id = Animal.race_id
WHERE Race.nom = 'Berger Allemand';
Voici un exemple de requête avec sous-requête qu'il est impossible de faire avec une simple jointure :
Code : SQL
SELECT id, nom, espece_id
FROM Race
WHERE espece_id = (
SELECT MIN(id)
-- Je rappelle que MIN() permet de récupérer
la plus petite valeur de la colonne parmi les lignes sélectionnées
FROM Espece);
id
nom
espece_id
1 Berger allemand
1
2 Berger blanc suisse 1
3 Boxer
1
En ce qui concerne les autres opérateurs de comparaison, le principe est exactement le même :
Code : SQL
SELECT id, nom, espece_id
FROM Race
WHERE espece_id < (
SELECT id
FROM Espece
WHERE nom_courant = 'Tortue d''Hermann');
id
nom
espece_id
1 Berger allemand
1
2 Berger blanc suisse 1
3 Boxer
1
4 Bleu russe
2
5 Maine coon
2
Partie 2 : Index, jointures et sous-requêtes
116/414
www.openclassrooms.com
