Database/Oracle

[Oracle]Outer Join(외부조인)

  • -
반응형


취업 후에 DB를 만지는 일이 더 많아진 것 같다..


Outer Join(외부조인)


Outer Join은 Inner Join에 반대되는 개념이다.

Inner Join은 조인 조건절을 만족하는 레코드만 출력을 시키지만 Outer Join은 조건절을 만족하지 않는 레코드도 출력을 시키며 조인되는 해당 컬럼의 값은 Null로 표시된다.


오라클에서 Outer Join을 사용하는 경우 흔히 (+)연산자를 사용한다.


이해를 확실히 하기 위해 간단한 쿼리를 만들어 테스트하였다.


SELECT A.A, A.B, B.A, B.B

FROM (

      SELECT '1' A, 'TEST_A' B

      FROM DUAL

      UNION ALL

      SELECT '2' A, 'TEST_B' B

      FROM DUAL

      UNION ALL

      SELECT '3' A, 'TEST_C' B

      FROM DUAL

      ) A,

      (

      SELECT '1' A, 'TEST_A' B

      FROM DUAL

      UNION ALL

      SELECT '2' A, 'TEST_B' B

      FROM DUAL

      UNION ALL

      SELECT '4' A, 'TEST_D' B

      FROM DUAL

      ) B


조인 조건이 없기 때문에 아래와 같은 결과가 나타난다.



이유는 조건이 없기 때문에 그림과 같이 엮여서 조회되었기 때문이다.



그럼 이제 A테이블과 B테이블의 A컬럼을 이용하여 조인을 해보자.


SELECT A.A, A.B, B.A, B.B

FROM (

      SELECT '1' A, 'TEST_A' B

      FROM DUAL

      UNION ALL

      SELECT '2' A, 'TEST_B' B

      FROM DUAL

      UNION ALL

      SELECT '3' A, 'TEST_C' B

      FROM DUAL

      ) A,

      (

      SELECT '1' A, 'TEST_A' B

      FROM DUAL

      UNION ALL

      SELECT '2' A, 'TEST_B' B

      FROM DUAL

      UNION ALL

      SELECT '4' A, 'TEST_D' B

      FROM DUAL

      ) B

WHERE A.A=B.A



조건을 만족하는 행만 출력되는 것을 확인할 수 있다.

그럼 이제 Outer Join을 시켜보자.


먼저 A 기준


WHERE A.A(+)=B.A


B와 조건에 맞지 않는 컬럼이 있더라도 모두 나타내겠다는 의미이다.

아래와 같은 결과가 나왔다.



다음 B 기준


WHERE A.A=B.A(+)


결과는 예상한대로 출력이 되었다.

쉽게 생각하면 null이 출력될 곳에 (+)를 걸어주면 될 것 같다.





종종 기본이 되는 것들을 잊어버릴 때가 있다.

블로그를 시작하면서 기록을 남기려고 정리를 하다보니 좀 더 내 것이 되어가는 느낌이다.

+피드백은 언제나 환영입니다 :)



반응형
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.