본문 바로가기
SQL

SQL 강의 SQLP SQLD 기출 문제 - 003 / ORACLE OUTER JOIN 이해

by SQL Master 2022. 10. 6.
반응형

이 문제는 테이블 간에 OUTER JOIN 시 실수하는 부분을 체크하는 목적의 문제입니다. 이 부분은 실제로 현업에서도 개발자가 자주 틀리는 부분이니 꼭 알아주면 좋습니다.

 

문제

아래 SQL의 결과는??

TABLE T1 TABLE T2 TABLE T3 TABLE T4
COLUMN1 COLUMN1 COLUMN1 COLUMN1
A C A E
B B NULL C
C A B B
D NULL D A
SELECT COUNT(*)
  FROM T1, T2, T3, T4
 WHERE T1.COLUMN1 = T2.COLUMN1(+)
   AND T2.COLUMN1 = T3.COLUMN1(+)
   AND T3.COLUMN1 = T4.COLUMN1

 

 


 

문제풀이

  • ORACLE에서 OUTER JOIN은 조인되는 테이블의 조인키에 (+) 해야 한다.
  • OUTER JOIN은 메인 테이블의 모든 컬럼을 다 모여준다.
  • 이 문제의 함정은 T3과 T4에 (+) 빠지면서 OUTER JOIN에서 INNER JOIN으로 변경되었다.
SELECT COUNT(*)
  FROM T1, T2
 WHERE T1.COLUMN1 = T2.COLUMN1(+)
 
 T1   T2
 A    A
 B    B
 C    C
 D    NULL

>> 정상적인 OUTER JOIN으로 T1의 모든 건수를 리턴한다. 4건

 

SELECT COUNT(*)
  FROM T1, T2, T3
 WHERE T1.COLUMN1 = T2.COLUMN1(+)
   AND T2.COLUMN1 = T3.COLUMN1(+)
 
 T1   T2    T3
 A    A      A
 B    B      B
 C    C      NULL
 D    NULL   NULL

>> 정상적인 OUTER JOIN으로 T1의 모든 건수를 리턴 한다. 4건

 

SELECT COUNT(*)
  FROM T1, T2, T3, T4
 WHERE T1.COLUMN1 = T2.COLUMN1(+)
   AND T2.COLUMN1 = T3.COLUMN1(+)
   AND T3.COLUMN1 = T4.COLUMN1
   
 T1   T2    T3    T4
 A    A      A    A
 B    B      B    B

>> (+)가 없어서 INNER JOIN으로 변경되어서 2건만 리턴하게 된다.

 


 

 


오늘은 테이블의 제약 조건에 따른 INSERT 문의 문법에 대해서 풀어봤습니다.

추가적인 궁금증은 댓글로 달아주세요!! :)

 

반응형

댓글