문제
두 테이블 부서와 사원을 결합하되, 매칭되지 않는 부서(사원이 한 명도 없는 부서)와 부서가 배정되지 않은 사원까지 양쪽 미매칭 행을 모두 결과에 포함시키려고 한다. 가장 적절한 방법은?
① NVL 함수를 사용한 CROSS JOIN ② NVL 함수를 사용한 INNER JOIN ③ FULL OUTER JOIN ④ UNION
정답
3번
해설
정답은 ③이다. FULL OUTER JOIN은 조인 조건이 일치하는 행은 물론, 왼쪽·오른쪽 테이블 각각에서 대응 행이 없는 행까지 모두 결과에 포함하고 부족한 쪽 컬럼은 NULL로 채운다. '양쪽 미매칭을 모두 표시'하는 요구에 정확히 부합한다.
- ①: CROSS JOIN은 두 테이블의 모든 조합(카티션 곱)을 만들 뿐 매칭/미매칭 개념이 없고, NVL로도 원하는 결합을 만들 수 없다.
- ②: INNER JOIN은 양쪽이 일치하는 행만 남기므로 미매칭 행이 모두 사라진다. NVL을 붙여도 조인 결과 행 집합 자체는 늘지 않는다.
- ④: UNION은 컬럼 구조가 같은 두 결과 집합을 세로로 합칠 뿐, 두 테이블을 컬럼 기준으로 가로 결합하는 조인이 아니다.
보충: FULL OUTER JOIN은 (LEFT OUTER JOIN) UNION (RIGHT OUTER JOIN)으로도 표현할 수 있다. Oracle 구식 표기 (+)로는 양방향 외부조인을 한 번에 표현할 수 없다.