Il est possible d'effectuer des requêtes qui comportent plus d'une jointure.
Par exemple, si on voulait afficher le nom du client (et son prénom) pour un rendez-vous donné, on constate qu'il n'y a pas de lien direct entre les tables clients et rendezvous. On devra nécessairement passer par la table voitures puisque c'est elle qui fait le lien entre rendezvous et clients.

On utilisera donc la requête suivante :
SELECT rendezvous.id, prenom, nomfamille FROM clients
INNER JOIN voitures ON client_id = clients.id
INNER JOIN rendezvous ON voiture_id = voitures.id;
Lorsqu'une requête nécessite plus d'une jointure, il est aussi possible d'utiliser des jointures externes. Notez cependant que lorsque plusieurs jointures sont utilisées dans la même requête, toutes les jointures situées à gauche d'une jointure interne seront considérées comme internes.
Il n'est pas possible de mettre un OUTER JOIN suivi d'un INNER JOIN puisque les deux jointures seront considérées comme internes.
Ex : pour faire apparaître la liste de tous les clients ayant eu ou non des rendez-vous avec, pour chacun, la date du rendez-vous s'il y a lieu, on pourra utiliser la requête suivante :
SELECT clients.id, prenom, nomfamille, date FROM rendezvous
INNER JOIN voitures ON voiture_id = voitures.id
RIGHT OUTER JOIN clients ON client_id = clients.id;
La jointure externe pointe à droite donc la table de droite (clients) peut avoir des enregistrements qui n'ont pas de correspondance dans la table voitures.
On voit donc clairement les dates des rendez-vous de Jacinthe Courtois, de Marc Frenette, de Louis Gagnon et de Marco D'Argy. On voit également que Line Jacques, Martin Bellemare et les suivants n'ont eu aucun rendez-vous.

Notez que la requête suivante ne fonctionnerait pas :
SELECT clients.id, prenom, nomfamille, date FROM clients
voitures ON client_id = clients.id
INNER JOIN rendezvous ON voiture_id = voitures.id;
Dans le résultat de cette requête, on ne verrait pas les clients n'ayant aucun rendez-vous puisque la requête aurait été traitée comme s'il s'agissait de deux INNER JOIN.
Par contre, la requête suivante fonctionnerait puisqu'on a fait suivre le LEFT OUTER JOIN par un autre LEFT OUTER JOIN. On obtiendrait pratiquement les mêmes résultats qu'avec le INNER JOIN suivi d'un RIGHT OUTER JOIN.
SELECT clients.id, prenom, nomfamille, date FROM clients
LEFT OUTER JOIN voitures ON client_id = clients.id
LEFT OUTER JOIN rendezvous ON voiture_id = voitures.id;
Remarquez qu'on a utilisé un LEFT OUTER JOIN à la suite du LEFT OUTER JOIN afin de poursuivre le sens de la jointure externe.

Les résultats obtenus sont légèrement différents de ceux de la requête avec un INNER JOIN suivi d'un RIGHT OUTER JOIN :
▼Publicité