loading

Self JOIN (셀프 조인)

2014. 5. 12. 00:11
728x90
반응형

ㅇ Self Join


셀프 조인은 원하는 데이터들이 한 테이블에 있을 때 사용한다. 


emp 테이블에는 각 직원과 그 직원의 매니저에 해당하는 MGR 정보가 있다. 

MGR은 이름이 아닌 사번이기 때문에 EMP 테이블의 EMPNO 정보로 이름을 조회해야 한다. 


이렇게 한 테이블에 필요한 컬럼이 있을 때, 

한 테이블을 두 개의 테이블처럼 EQUI JOIN으로 조회할 수 있다. 


SQL> SELECT * FROM SCOTT.EMP;


EMPNO ENAME      JOB       MGR   HIREDATE             SAL       COMM      DEPTNO 

----- ---------- --------- ----- -------------------- --------- --------- ------ 

 7369 SMITH      CLERK      7902 1980/12/17 00:00:00        800               20

 7499 ALLEN      SALESMAN   7698 1981/02/20 00:00:00       1600       300     30

 7521 WARD       SALESMAN   7698 1982/02/22 00:00:00       1250       500     30

 7566 JONES      MANAGER    7839 1981/04/02 00:00:00       2975               20

 7654 MARTIN     SALESMAN   7698 1981/09/28 00:00:00       1250      1400     30

 7698 BLAKE      MANAGER    7839 1981/05/01 00:00:00       2850               30

 7782 CLARK      MANAGER    7839 1981/06/09 00:00:00       2450               10

 7788 SCOTT      ANALYST    7566 1987/04/17 00:00:00       3000               20

 7839 KING       PRESIDENT       1981/11/17 00:00:00       5000               10

 7844 TURNER     SALESMAN   7698 1981/09/08 00:00:00       1500         0     30

 7876 ADAMS      CLERK      7788 1987/05/23 00:00:00       1100               20

 7900 JAMES      CLERK      7698 1981/12/03 00:00:00        950               30

 7902 FORD       ANALYST    7566 1981/12/03 00:00:00       3000               20

 7934 MILLER     CLERK      7782 1982/01/23 00:00:00       1300               10


14 rows selected.




SQL> select a.ename "emp_name", b.ename "manager_name"

from emp a, emp b

where a.mgr = b.empno;


emp_name   manager_name 

---------- ------------ 

FORD       JONES       

SCOTT      JONES       

JAMES      BLAKE       

TURNER     BLAKE       

MARTIN     BLAKE       

WARD       BLAKE       

ALLEN      BLAKE       

MILLER     CLARK       

ADAMS      SCOTT       

CLARK      KING        

BLAKE      KING        

JONES      KING        

SMITH      FORD        


13 rows selected.




위 오라클 self join의 ANSI SQL은 다음과 같다. 

SQL> select a.ename "emp_name", b.ename "manager_name"

from emp a JOIN emp b

ON a.mgr = b.empno;





728x90

또루아빠 SQL(오라클,mysql) , , ,