sql

[ORACLE]다중 테이블(2개이상) 조인시 주의사항.

JKimKorea 2021. 12. 7. 18:34
SELECT A.O_NM
     , B.O_NM
     , C.O_NM
FROM (
     SELECT 'C001' O_CD , 'A' O_NM FROM DUAL
     ) A
    ,(
     SELECT 'C002' O_CD , 'B' O_NM FROM DUAL
     ) B
    ,(
     SELECT 'C003' O_CD , 'C' O_NM FROM DUAL UNION ALL
     SELECT 'C001' O_CD , 'C2' O_NM FROM DUAL
     ) C 
WHERE A.O_CD=B.O_CD(+)
  AND B.O_CD=C.O_CD(+)
;

A 테이블에 B 테이블아우터 조인시 생성되는 데이터에 C테이블을 아우터 조인할 시 처음엔 그 데이터모두에 아우터 조인이 걸린다고 생각했으나 B = C(+)로 조인할 경우 해당 B 영역의 데이터 값(=NULL)과 C테이블이 조인되는 것이었다. 그렇기 때문에 위와같은 결과 값이 나오게 되고,

 

아래와 같이 조인을 걸면 결과 값이 맨 하단그림과 같이 나오는 것이다. 

SELECT A.O_NM
     , B.O_NM
     , C.O_NM
FROM (
     SELECT 'C001' O_CD , 'A' O_NM FROM DUAL
     ) A
    ,(
     SELECT 'C002' O_CD , 'B' O_NM FROM DUAL
     ) B
    ,(
     SELECT 'C003' O_CD , 'C' O_NM FROM DUAL UNION ALL
     SELECT 'C001' O_CD , 'C2' O_NM FROM DUAL
     ) C 
WHERE A.O_CD=B.O_CD(+)
  AND A.O_CD=C.O_CD(+)
;