toggle menu

Oracle Self Join 정리

2012.07.10 16:45 Database/Oracle

같은 테이블을 별칭을 붙여 또다른 테이블처럼 가져와 조인하는 것을 self join이라고 한다.


매니저가 KING인 사원들의 이름과 직급을 가져와 보자.


SQL> SELECT 사원.ENAME, 사원.JOB
FROM EMP 사원 JOIN EMP 매니저 ON 사원.MGR = 매니저.EMPNO
WHERE 매니저.ENAME = 'KING';

ENAME      JOB
---------- ---------
CLARK      MANAGER
JONES      MANAGER
BLAKE      MANAGER




SQL> SELECT DISTINCT 사원.ENAME, 사원.JOB
FROM EMP 사원, EMP 매니저
WHERE 사원.MGR = ( SELECT EMPNO FROM EMP WHERE ENAME='KING' );

ENAME      JOB
---------- ---------
CLARK      MANAGER
JONES      MANAGER
BLAKE      MANAGER


아래의 서브쿼리를 사용한 것과 위의 쿼리는 동일한 효과를 가져온다.
두 개의 테이블(실상은 하나의 테이블)을 연결한 후 두번째 매니저인 두번째 테이블의 이름이 KING인 것을 조건으로 제한하여 결과를 가져온다.


이번에는 SCOTT과 같은 지역에 사는=같은 부서인 사원들을 검색해보자.


SQL> SELECT 사원.ENAME, 타사원.ENAME
FROM EMP 사원 JOIN EMP 타사원 ON 사원.DEPTNO = 타사원.DEPTNO
WHERE 사원.ENAME = 'SCOTT' AND 타사원.ENAME != 'SCOTT';

ENAME      ENAME
---------- ----------
SCOTT      SMITH
SCOTT      JONES
SCOTT      ADAMS
SCOTT      FORD



마찬가지로 두 개의 테이블을 DEPTNO를 통해 조인한 후 사원의 이름을 SCOTT으로 찾고 자기 자신을 제외하는 방식으로 찾게 된다.

Database/Oracle 관련 포스팅 더보기