Il n'y a rien (que je sache) qui puisse être fait avec une jointure droite qui ne puisse pas être fait avec une jointure gauche. Mais parfois, la syntaxe avec les jointures gauches est plus laide. Disons que vous disposez des tableaux suivants:
Persons
ID | Name
Orders
ID | CustomerId | other unimportant stuff
SpecialOrderDetails
ID | OrderId | other stuff
Disons que vous devez obtenir une liste de toutes les personnes dans votre base de données et de toutes les commandes qu'elles ont avec des détails de commande spéciaux (nous dirons que toutes les commandes n'ont pas de détails de commande spéciaux). Donc, vous feriez normalement une jointure gauche des gens aux ordres. Mais alors vous devez vous joindre à des détails de commande spéciaux. Si vous utilisez une jointure interne là-bas, cela ferait effectivement de la jointure gauche des personnes aux commandes une jointure interne. IE: c'est ce que vous voulez faire mais cela ne fonctionne pas (cela exclura toute personne qui n'a pas de commande spéciale):
select p.*, o.*, d.*
from Persons p
left join Orders o on o.CustomerId = p.Id
inner join SpecialOrderDetails d on d.OrderId = o.Id
Vous pouvez donc le réécrire comme ceci:
--get all the people without a special order
select p.*, NULL, NULL, ... --NULLs placeholders for all the fields from OrderDetails and SpecialOrderDetails
from Persons p
left join Orders o on o.CustomerId = p.Id
left join SpecialOrderDetails d on d.OrderId = o.Id
where o.Id is null
union
--get all the people with a special order
select p.*, o.*, d.*
from Persons p
inner join Orders o on o.CustomerId = p.Id
inner join SpecialOrderDetails d on d.OrderId = o.Id
Pas exactement clair (en supposant aucun commentaire), mais il fait le travail. S'il s'agit de quelque chose de plus que ponctuel (c'est-à-dire quelque chose que quelqu'un devra revenir et entretenir un jour), l'utilisation d'une jointure droite pourrait rendre plus claire l'intention.
select p.*, o.*, d.*
from Orders o
inner join SpecialOrderDetails d on d.OrderId = o.Id
right join Persons p on p.Id = o.CustomerId
Ce qui est un peu plus succinct et clair (mais seulement si celui qui le lit comprend les bonnes jointures). Notez que cela peut être écrit avec des jointures gauches, mais cela nécessite une jointure imbriquée (que moins de personnes connaissent probablement que les jointures droites).
select p.*, o.*, d.*
from Persons p
left join Orders o
inner join SpecialOrderDetails d on d.OrderId = o.Id
on o.CustomerId = p.Id
À ce stade, il s'agit de choisir ce qui est le plus clair et ce que la plupart des gens comprendront (sauriez-vous comment rechercher cette syntaxe sur Google si vous ne saviez pas qu'elle s'appelait une jointure imbriquée?).
En bref, vous n'avez pas strictement besoin de jointures correctes, mais elles pourraient faciliter la lecture.