Немає нічого (що я знаю), що можна зробити за допомогою правого з'єднання, що неможливо зробити з лівим з'єднанням. Але іноді синтаксис з лівим приєднанням більш потворний. Скажімо, у вас є такі таблиці:
Persons
ID | Name
Orders
ID | CustomerId | other unimportant stuff
SpecialOrderDetails
ID | OrderId | other stuff
Скажімо, вам потрібно отримати список усіх людей у вашій базі даних та будь-яких замовлень, які вони мають із спеціальними реквізитами замовлення (ми скажемо, що не всі замовлення мають спеціальні реквізити замовлення). Таким чином, ви зазвичай робите зліва людей від замовлень. Але тоді вам доведеться приєднатися до спеціальних деталей порядку. Якщо ви використовуєте внутрішнє з'єднання там, це ефективно зробить ліве з'єднання від людей до замовлень на внутрішнє з'єднання. IE: це те, що ви хочете зробити, але не працює (це виключає тих, хто не має спеціального замовлення):
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
Отже, ви можете переписати це так:
--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
Не зовсім зрозуміло (не маючи коментарів), але це робить свою роботу. Якщо це щось більше, ніж разове (тобто те, що комусь доведеться повернутися і зберегти колись), використовуючи право приєднання, це може зрозуміти, у чому намірилися.
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
Що трохи більш лаконічно і зрозуміло (але лише якщо той, хто його читає, той розуміє, як правильно). Зауважте, що це може бути записано з лівими приєднаннями, але це потребує вкладеного з'єднання (яке, мабуть, менше людей знайоме, ніж право приєднується).
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
На даний момент, це вибір того, що є найбільш зрозумілим і що зрозуміють більшість людей (чи знаєте ви, як гуглювати цей синтаксис, якби ви не знали, що це називається вкладеним об'єднанням?).
Коротше кажучи, вам не потрібно строго приєднуватись, але вони можуть полегшити читання.