Self Join
- 같은 테이블을 두번 이상 조인하는 것을 의미한다.
ex)
-- SMITH 사원의 사원번호, 이름, 직속상관의 이름을 가져온다.
select a1.empno, a1.ename, a2.ename
from emp a1, emp a2
where a1.mgr = a2.empno and a1.ename = 'SMITH';
ex)
-- FORD사원 밑에서 일하는 사원들의 사원번호, 이름, 직무를 가져온다.
select a1.empno, a1.ename, a1.job
from emp a1, emp a2
where a1.mgr = a2.empno and a2.ename = 'FORD';
ex)
-- SMITH 사원의 직속상관과 동일한 직무를 가지고 있는 사원들의 사원번호, 이름, 직무를 가져온다.
select a3.empno, a3.ename, a3.job
from emp a1, emp a2, emp a3
where a1.mgr = a2.empno and a2.job = a3.job and a1.ename = 'SMITH';
Outer join
- 조인 조건에 해당하지 않기 떄문에 결과에 포함되지 않는 로우까지 가져오는 조인이다.
ex)
-- 각 사원의 이름, 사원번호, 직장상사 이름을 가져온다. 단 직속상관이 없는 사원도 가져온다.
select a1.ename, a1.empno, a2.ename
from emp a1, emp a2
where a1.mgr = a2.empno(+);
null이 있는 쪽에 (+)한다.
ex)
-- 모든 부서의 소속 사원의 근무부서명, 사원번호, 사원이름, 급여를 가져온다.
select b.dname,a.ename,a.empno,a.sal
from emp a, dept b
where a.deptno(+) = b.deptno;