Secret (cliquez pour afficher)
Code : SQL
SELECT Animal.nom AS nom_animal, Animal.date_naissance, Race.nom
AS race
FROM Animal
LEFT JOIN Race
ON Animal.race_id = Race.id
WHERE (Race.description NOT LIKE '%poil%'
AND Race.description NOT LIKE '%robe%'
AND Race.description NOT LIKE '%pelage%'
)
OR Race.id IS NULL;
Il faut donc :
soit qu'on ne connaisse pas la race (on n'a alors aucune information sur le pelage de la race, a fortiori) ;
soit qu'on connaisse la race, mais que dans la description de celle-ci il n'y ait pas d'information sur le pelage.
1/ On ne connaît pas la race
Les animaux dont on ne connaît pas la race ont NULL dans la colonne race_id . Mais vu que l'on fait une jointure sur cette
colonne, il ne faut pas oublier de faire une jointure externe, sinon tous ces animaux sans race seront éliminés.
Une fois que c'est fait, pour les sélectionner, il suffit de mettre la condition Animaux.race_id IS NULL par exemple, ou
simplement Race.#n'importe quelle colonne# IS NULL vu qu'il n'y a pas de correspondance avec Race.
2/ Pas d'information sur le pelage dans la description de la race
Je vous ai donné comme indice le fait que j'utilisais les mots "pelage", "poil" ou "robe" dans les descriptions des espèces. Il
fallait donc sélectionner les races pour lesquelles la description ne contient pas ces mots. D'où l'utilisation de NOT LIKE.
Si on met tout ça ensemble : il fallait faire une jointure externe des tables Animal et Race, et ensuite sélectionner les animaux
qui répondaient à l'une ou l'autre des conditions (opérateur logique OR).
B/ Compliquons un peu les choses
Jointures sur deux tables, ou plus !
1. La race ET l'espèce
Vous devez obtenir la liste des chats et des perroquets amazones, avec leur sexe, leur espèce (nom latin) et leur race s'ils en
ont une. Regroupez les chats ensemble, les perroquets ensemble et, au sein de l'espèce, regroupez les races.
Secret (cliquez pour afficher)
Code : SQL
SELECT Animal.nom as nom_animal, Animal.sexe, Espece.nom_latin as
espece, Race.nom as race
FROM Animal
INNER JOIN Espece
ON Animal.espece_id = Espece.id
LEFT JOIN Race
ON Animal.race_id = Race.id
WHERE Espece.nom_courant IN ('Perroquet amazone', 'Chat')
ORDER BY Espece.nom_latin, Race.nom;
Partie 2 : Index, jointures et sous-requêtes
109/414
www.openclassrooms.com
Précédent

- 109/413

Suivant