반응형
이 문제는 테이블 간에 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 문의 문법에 대해서 풀어봤습니다.
추가적인 궁금증은 댓글로 달아주세요!! :)
반응형
'SQL' 카테고리의 다른 글
SQL 강의 SQLP SQLD 기출 문제 - 006 ( ORACLE AUTO COMMIT ) (0) | 2022.10.10 |
---|---|
SQL 강의 SQLP SQLD 기출 문제 - 005 / 데이터 타입, 묵시적 형변환 (0) | 2022.10.08 |
SQL 강의 SQLP SQLD 기출 문제 - 004 / 다중 IN 조건 이해 (0) | 2022.10.07 |
SQL 강의 SQLP SQLD 기출 문제 - 002 ( NULL, CASE, DECODE, NVL 이해 ) (0) | 2022.10.06 |
SQL 강의 SQLP SQLD 기출 문제 - 001 / INSERT, PRIMARY KEY, NOT NULL 제약 조건 (0) | 2022.10.05 |
댓글