A 테이블과 B테이블을 Equijoin한다고 했을 때 공통되는 칼럼의 레코드에서 B테이블의 레코드 중 A테이블에서 검색이 되지 않는 레코드는 SELECT로 나타나지 않는다.
즉, 조인된 B테이블 엄연히 존재함에도 A테이블에 없기 때문에 나타나지 않는 것이다.
이 때, A테이블에 없어도 나타나게 하려고 설정하는 조인을 Outer Join이라고 한다.
예를 들어 emp 테이블에는 부서번호가 10, 20, 30만 존재하는데, 부서의 정보가 들어있는 dept테이블에는 10,20,30뿐만 아니라 40도 있다. 이 두 테이블을 Equipjoin하면 40번은 안나온다는 얘기다.
이럴 때 40번도 나오게 하려는 조인을 Outer Join이라고 하는 것이다.
연산자는 (+)를 쓰며 조인하려는 레코드가 없는 쪽에 (+)를 붙인다.
SELECT e.empno, e.ename, e.job, e.deptno,
d.deptno, d.dname, d.loc
FROM dept d, emp e
WHERE d.deptno = e.deptno(+);
// 40번도 나타나게 하기 위해 40번이 없는 테이블, 즉 emp테이블 쪽에 (+)를 붙인다.
EMPNO ENAME JOB DEPTNO DEPTNO DNAME LOC
----- ------------- ------------- ------- ------- ------------- --------
7369 SMITH CLERK 20 20 RESEARCH DALLAS
7499 ALLEN SALESMAN 30 30 SALES CHICAGO
7521 WARD SALESMAN 30 30 SALES CHICAGO
7566 JONES MANAGER 20 20 RESEARCH DALLAS
7654 MARTIN SALESMAN 30 30 SALES CHICAGO
7698 BLAKE MANAGER 30 30 SALES CHICAGO
7782 CLARK MANAGER 10 10 ACCOUNTING NEW YORK
7788 SCOTT ANALYST 20 20 RESEARCH DALLAS
7839 KING PRESIDENT 10 10 ACCOUNTING NEW YORK
7844 TURNER SALESMAN 30 30 SALES CHICAGO
7876 ADAMS CLERK 20 20 RESEARCH DALLAS
EMPNO ENAME JOB DEPTNO DEPTNO DNAME LOC
----- ------------- ------------- ------- ------- ------------- --------
7900 JAMES CLERK 30 30 SALES CHICAGO
7902 FORD ANALYST 20 20 RESEARCH DALLAS
7934 MILLER CLERK 10 10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
위와 같이 결과가 쭉 출력되고, emp테이블에 없는 40번의 정보는 맨 아래에 출력되었다.
[출처] Outer Join|작성자 이경모