INNER
의 경우, 순서는 중요하지 않습니다. 선택 항목을 SELECT *
에서 SELECT a.*, b.*, c.*
으로 변경하면 쿼리는 동일한 결과를 반환합니다. 및 (업데이트) 것들을 훨씬 더 복잡하다 - (LEFT
, RIGHT
또는 FULL
) OUTER
를 들어
네, 주문 사항이 합류했다.
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
:
먼저
, 외부 조인은 너무 a LEFT JOIN b
는 (교환 법칙과 연관성)을 모두 포함하여 예제 특성 때문에, 연관없는 두 b LEFT JOIN a
외부 조인과 동일하지 않습니다, 교환 법칙이 성립하지 않습니다
는 동등하다 :
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
하지만 :
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
AND c.bc_id = b.bc_id
는 동등하지 않다 :
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
AND b.bc_id = c.bc_id
다른 (희망 단순한) 연관성 예. (a LEFT JOIN b) LEFT JOIN c
으로이 생각해
a LEFT JOIN b
ON b.ab_id = a.ab_id -- AB condition
LEFT JOIN c
ON c.bc_id = b.bc_id -- BC condition
이 이a LEFT JOIN (b LEFT JOIN c)
에 해당합니다 :
a LEFT JOIN
b LEFT JOIN c
ON c.bc_id = b.bc_id -- BC condition
ON b.ab_id = a.ab_id -- AB condition
을 우리가 "좋은"ON
조건이 때문. ON b.ab_id = a.ab_id
과 c.bc_id = b.bc_id
은 모두 동등 확인이며 NULL
비교를 포함하지 않습니다.
당신도 다른 사업자 또는 같은 더 복잡한 사람과 조건을 가질 수 있습니다 ON a.x <= b.x
또는 ON a.x = 7
또는 ON a.x LIKE b.x
또는 ON (a.x, a.y) = (b.x, b.y)
두 쿼리는 여전히 상당 할 것이다.
그러나 IS NULL
또는 COALESCE()
과 같이 null과 관련된 함수가있는 경우 (예 : 조건이 b.ab_id IS NULL
인 경우) 두 쿼리가 동일하지 않습니다.
무엇이 ''입니까? A와 B, A와 C를 합치고 있습니까? 아니면 A와 B, B와 C를 합치십니까? –
beny23
안녕하세요 Beny, 내 질문에 코드는 추상화입니다. 나는 A와 B 또는 A와 C를 합치는 것에 관심이 없다. 단지 같은 구문을 사용하여 동일한 결과를 얻을 수 있는지 알고 싶다. –