문제
부서 테이블의 모든 행을 보존하면서 사원 테이블과 조인하려고 한다. 다음 중 조인 결과가 나머지 셋과 다른 것은?
① SELECT * FROM 부서 D LEFT OUTER JOIN 사원 E ON D.부서번호 = E.부서번호; ② SELECT * FROM 부서 D, 사원 E WHERE D.부서번호 = E.부서번호(+); ③ SELECT * FROM 부서 D, 사원 E WHERE D.부서번호(+) = E.부서번호; ④ SELECT * FROM 사원 E RIGHT OUTER JOIN 부서 D ON E.부서번호 = D.부서번호;
정답
3번
해설
부서를 보존(왼쪽 보존)하려면 결핍이 생길 수 있는 사원 쪽에 (+)를 붙여야 한다. ① ANSI LEFT OUTER JOIN(부서 보존), ② (+)가 사원측이므로 부서 보존, ④ 사원 RIGHT OUTER JOIN 부서는 부서 보존으로 셋 다 동일하다. ③은 (+)가 부서측에 붙어 사원을 보존하는 반대 방향 아우터 조인이 되므로 결과가 다르다. Oracle의 (+)는 NULL로 채워질(부족한) 쪽에 붙는다는 규칙을 기억한다.