Left outer join 을 당한 테이블과 다른 테이블을 조인할 때, left outer join을 해줘야하나요? 1 2 1,012

by 호호아줌마 [Oracle 기초] left oute rjoin 레프트아우터조인 [2021.03.11 14:52:42]


FROM TB_A A
   , TB_B B
   , TB_C C
WHERE 1=1
AND A.A_ID = B.B_ID(+)
AND A.A_NAME = B.B_NAME(+)
AND B.MD_CODE = C.MD_CODE(+)  -- 여기가 궁금!

안녕하세요

쿼리를 보던 중 이해가 잘 안되어 질문드립니다.

A와 B는 주문 관련 테이블이고, C는 마스터성 테이블입니다.

A 를 기준으로 B 를 아우터조인했는데, B와 조인하는 C 는 꼭 아우터 조인으로 걸어줘야하나요?

C가 마스터성 데이터라서, 제가 생각했을때는 아우터 조인을 걸 이유가 없는데 저렇게 되어있어서요...

아우터 조인으로 걸어줘야한다면 왜그런걸까요? 아니면 단순 실수일까요?

by 마농 [2021.03.11 15:08:54]

아우터 조인의 특성상 조인되는 b 가 없더라도 a 는 다 나와야 합니다.
그런데 비어 있는 b 와 c 를 이너조인하게 되면 조인에 실패하게 되어 조회가 안됩니다.
b 가 없더라도 a는 나와야 하는 원래의 목적에 위배가 됩니다.
b 에 아우터 조인을 했다면? b 에 연결되는 c 도 순차적으로 아우터 조인이 되어야 합니다.

b 와 c 만 본다면? 이너조인이 맞지만
a 에 아우터 조인된 b 의 입장에서 본다면?
b 에 null 값이 포함되어 있고, 이 null 도 조회되어야 하기 때문에 c 를 아우터 조인해야 합니다.


by 호호아줌마 [2021.03.11 15:27:53]

친절한 답변 감사드립니다!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입