Zara
Maine coon
Zonko
Maine coon
Boucan
Singapura
Boule
Singapura
Fiero
Singapura
On peut voir ici que les chats Choupi et Roucky pour lesquels je n'ai pas d'information sur la race (race_id est NULL), ne sont
pas repris dans les résultats. De même, aucun des chats n'est de la race "Sphynx", celle-ci n'est donc pas reprise. Si je veux les
inclure, je dois utiliser une jointure externe.
Jointure externe
Comme je viens de vous le dire, une jointure externe permet de sélectionner également les lignes pour lesquelles il n'y a pas de
correspondance dans une des tables jointes. MySQL permet deux types de jointures externes : les jointures par la gauche et les
jointures par la droite.
Jointures par la gauche
Lorsque l'on fait une jointure par la gauche (grâce aux mots-clés LEFT JOIN ou LEFT OUTER JOIN), cela signifie que l'on
veut toutes les lignes de la table de gauche (sauf restrictions dans une clause WHERE bien sûr), même si certaines n'ont pas de
correspondance avec une ligne de la table de droite.
Alors, table de gauche, table de droite, laquelle est laquelle ? C'est très simple, nous lisons de gauche à droite, donc la table de
gauche est la première table mentionnée dans la requête, c'est-à-dire, en général, la table donnée dans la clause FROM.
Si l'on veut de nouveau connaître la race des chats, mais que cette fois-ci nous voulons également afficher les chats qui n'ont
pas de race, on peut utiliser la jointure suivante (je ne prends que les chats dont le nom commence par "C" afin de réduire le
nombre de lignes, mais vous pouvez choisir les conditions que vous voulez) :
Code : SQL
SELECT Animal.nom AS nom_animal, Race.nom AS race
FROM Animal
-- Table
de gauche
LEFT JOIN Race
-- Table
de droite
ON Animal.race_id = Race.id
WHERE Animal.espece_id = 2
AND Animal.nom LIKE 'C%'
ORDER BY Race.nom, Animal.nom;
-- OU
SELECT Animal.nom AS nom_animal, Race.nom AS race
FROM Animal
-- Table
de gauche
LEFT OUTER JOIN Race
-- Table
de droite
ON Animal.race_id = Race.id
WHERE Animal.espece_id = 2
AND Animal.nom LIKE 'C%'
ORDER BY Race.nom, Animal.nom;
nom_animal
race
Choupi
NULL
Callune
Bleu russe
Caribou
Bleu russe
Cawette
Bleu russe
Partie 2 : Index, jointures et sous-requêtes
104/414
www.openclassrooms.com
Précédent

- 104/413

Suivant