Outer Join

DB 2009. 6. 2. 13:44

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|작성자 이경모


'DB' 카테고리의 다른 글

그룹 함수  (0) 2009.06.02
GROUP BY  (0) 2009.06.02
Join  (0) 2009.06.02
Equijoin  (0) 2009.06.02
Non-Equijoin  (0) 2009.06.02
Posted by 으랏차
,