emp 테이블 emp_no 105의 dept_id는 null, dept 테이블에서 dept_id가 30은 기획부인데요.
where e.dept_id = dept_id(+)
dept_id가 같은 행만 출력되는 것으로 보는데요.
결과는 dept_id가 같지 않은 (30, null) 105 행까지 출력됩니다.
이유가 왜 그런가요?
조인에서 where절에 있는 = 은 등호의 의미가 아닌가요?
안녕하세요. 좋은 질문 감사합니다.
결론부터 말씀드리면, (+) 기호가 붙어 있기 때문에 이 조건은 단순 등호 조인이 아니라 OUTER JOIN으로 동작합니다.
WHERE e.dept_id = dept_id(+)는 오라클 전통 조인 방식의 OUTER JOIN 표기입니다.
여기서 핵심은 (+) 기호가 없는 쪽이 기준 테이블이 된다는 점입니다. 즉 (+)가 붙지 않은 EMP 테이블이 기준이 되며,
EMP의 모든 행은 조인 성공 여부와 관계없이 출력됩니다.
그래서 emp_no 105(dept_id가 NULL)처럼 DEPT 테이블과 매칭되는 부서가 없는 행이라도,
기준 테이블인 EMP에 속해 있으므로 결과에 그대로 출력되는 것입니다. 이때 DEPT 쪽 컬럼은 채울 값이 없으므로 NULL로 표시됩니다.
-
관리자2026-08-11 15:48:24
안녕하세요. 좋은 질문 감사합니다.
결론부터 말씀드리면, (+) 기호가 붙어 있기 때문에 이 조건은 단순 등호 조인이 아니라 OUTER JOIN으로 동작합니다.
WHERE e.dept_id = dept_id(+)는 오라클 전통 조인 방식의 OUTER JOIN 표기입니다.
여기서 핵심은 (+) 기호가 없는 쪽이 기준 테이블이 된다는 점입니다. 즉 (+)가 붙지 않은 EMP 테이블이 기준이 되며,
EMP의 모든 행은 조인 성공 여부와 관계없이 출력됩니다.
그래서 emp_no 105(dept_id가 NULL)처럼 DEPT 테이블과 매칭되는 부서가 없는 행이라도,
기준 테이블인 EMP에 속해 있으므로 결과에 그대로 출력되는 것입니다. 이때 DEPT 쪽 컬럼은 채울 값이 없으므로 NULL로 표시됩니다.