들어 INNER
조인, 더, 순서는 중요하지 않습니다 않습니다. 선택 항목을에서 (으) SELECT *
로 변경하는 한 쿼리는 동일한 결과를 반환 합니다 SELECT a.*, b.*, c.*
.
( LEFT
, RIGHT
또는 FULL
) OUTER
조인의 경우 순서가 중요하며 업데이트 된 사항은 훨씬 복잡합니다.
첫째, 외부 조인은 교환 적이 지 a LEFT JOIN b
않으므로 다음과 같습니다.b LEFT JOIN a
외부 조인도 연관성이 없으므로 예제에서 (정류 성과 연관성) 속성을 모두 포함합니다.
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
다음과 같습니다 .
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()
예를 들어 조건이 b.ab_id IS NULL
인 경우 와 같이 null과 관련된 함수 인 경우 두 쿼리는 동일하지 않습니다.
<blahblah>
? A-B 및 A-C에 합류합니까, 아니면 A-B 및 B-C에 합류합니까?