이 두 가지가 동일하지 않은 경우가 있습니까?JOIN이 OUTER JOIN을 통해 어떻게 배포합니까?
A OUTER JOIN (B JOIN C)
A OUTER JOIN C OUTER JOIN B
이 두 가지가 동일하지 않은 경우가 있습니까?JOIN이 OUTER JOIN을 통해 어떻게 배포합니까?
A OUTER JOIN (B JOIN C)
A OUTER JOIN C OUTER JOIN B
예 : 첫 번째 예 (A OUTERJOIN (B JOIN C)
)에서
, B 또는 C 중 어느 하나에 일치하는 레코드 모두 B가없고 C가 생략 된 경우.
두 번째 예제 (A OUTERJOIN C OUTERJOIN B
)에서 B가 일치하는 레코드가 없어도 C가 반환 될 수 있습니다.
여전히 내 의견과 같습니다. B 조 조인 C가 빈 결과 집합을 생성하면 A 외부 조인 "빈 결과 집합"은 A와 동일합니다.
외부 조인 B 외부 조인 C는 다른 것입니다 (적어도 B와 C 중 하나가 . 빈되지 않음) 이후
는 같은 첫 번째 옵션을 쓸 명확 것, C에 연결하는 것 같다
당신의 두 가지 옵션 사이의 차이점은 C에서 데이터가 반환 여부A OUTERJOIN (C JOIN B)
경우가 이 부분을 보면 방금 두 가지 옵션을 세트로 볼 수 있습니다.
intersect(A,intersect(C,B))
intersect(A,C)
분명히, 두 사람은이 A로 교차하기 전에 첫 번째 형태는 C에서 행을 제거 할 수 있기 때문에 다른 테이블에서만 가능 하나이 보장되지 않기 때문에 당신이 차이를 만들 수 있습니다에 결합 필드 무엇
에있는 다른 테이블에 가입 할 필드입니다. 이 경우 테이블 b에는 테이블 c 또는 테이블 a에 조인 할 필드가 있습니까? 그것은 차이를 만든다. 반환 할 필드는 결과 집합과 차이를 만들어 내며 두 가지가 동일한 결과를 반환합니다. 일부 u 리가 데이터가 변경 될 때까지 동등한 것으로 표시되기 때.에 데이터의 상태가 달라집니다. 이러한 것들이 동등한 퀴어가 아니라는 것을 이해하면 이러한 실수를 피하는 데 도움이됩니다. 전체, 왼쪽 또는 오른쪽 외부 조인을 사용하든간에 차이가 있습니다. 그리고 마침내 당신이 추가하는 곳이 어디에서 동등한 것처럼 보이는지에 차이를 만들 수 있습니다.
는체크 아웃 임시 테이블 (SQL 서버 구문)
create table #a (aid int, sometext varchar(50))
create table #b (bid int, sometext2 varchar(50), cid int, aid int)
create table #c (cid int, sometext3 varchar(50), aid int)
insert into #a
values(1, 'test') , (2, 'test2'), (3, 'test3')
insert into #b
values(1, 'test', 1, 2) , (2, 'test2', 2, 1), (3, 'test3', 2, 2)
insert into #c
values(1, 'test', 1) , (2, 'test2', 2), (3, 'test3', 1)
select *
from #a a
left outer join #c c on a.aid = c.aid
left outer join #b b on a.aid = b.aid
select *
from #a a
left outer join #c c on a.aid = c.aid
left outer join #b b on c.cid = b.cid
select *
from #a a
left outer join #b b
join #c c on b.cid = c.cid
on a.aid = b.aid
select *
from #a a
right outer join #c c on a.aid = c.aid
right outer join #b b on a.aid = b.aid
select *
from #a a
right outer join #c c on a.aid = c.aid
right outer join #b b on c.cid = b.cid
select *
from #a a
right outer join #b b
join #c c on b.cid = c.cid
on a.aid = b.aid
select *
from #a a
full outer join #c c on a.aid = c.aid
full outer join #b b on a.aid = b.aid
select *
from #a a
full outer join #c c on a.aid = c.aid
full outer join #b b on c.cid = b.cid
select *
from #a a
full outer join #b b
join #c c on b.cid = c.cid
on a.aid = b.aid
예를 사용하여 이러한 예. 예 : b 조인 c에는 일치 항목이 없습니다. – jarlh
@jarlh : 죄송합니다. 내 업데이트를 참조하십시오. – Eric
"outerjoin"은 SQL 작업이 아닙니다. 왼쪽 외부 조인, 오른쪽 외부 조인 및 완전 외부 조인이 있습니다. 그들은 동일하지 않습니다. –