왼쪽 조인으로는 수행 할 수없는 오른쪽 조인으로 수행 할 수있는 항목 (내가 아는 것)이 없습니다. 그러나 때로는 왼쪽 조인이있는 구문이 더 나쁩니다. 다음 테이블이 있다고 가정 해 봅시다.
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
이 시점에서 가장 명확한 내용과 대부분의 사람들이 이해할 내용을 선택합니다 (내포 된 조인이라고하는 것을 모르는 경우 해당 구문을 구글하는 방법을 알고 있습니까?).
요컨대, 올바른 조인이 꼭 필요한 것은 아니지만 쉽게 읽을 수 있습니다.