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;

Comment and share

Join

  • 두개 이상의 테이블에 있는 컬럼의 값을 한번에 가져오기 위해 사용하는 것이 조인이다.
  • select 컬럼명 from 테이블1, 테이블2;
  • 두개 이상의 테이블을 조인하게 되면 다 대 다의 관계로 가져오기 때문에 테이블1의 로우의수X테이블2의 로우의 수 만큼 로우를 가져오게 된다.
  • 두개 이상의 테이블에서 가져온 결과중에 정확한 결과만 가져오기 위해 공통 부분을 이용한 조건문이 반드시 필요하다.

ex)

-- 사원테이블(emp)과 부서테이블(dept)을 join한다.
select * from emp;
-- 14행
select * from dept;
-- 4행

select * from emp a1, dept a2
-- 56행
where a1.deptno = a2.deptno;

ex)

-- 사원의 사원번호, 이름, 근무부서 이름을 가져온다.
select a1.empno, a1.ename, a2.dname
from emp a1,dept a2
where a1.deptno = a2.deptno;

ex)

-- 사원의 사원번호, 이름, 근무지역을 가져온다.
select a1.empno, a1.ename, a2.loc
from emp a1,dept a2
where a1.deptno = a2.deptno;

ex)

-- DALLAS에 근무하고 있는 사원들의 사원번호, 이름, 직무를 가져온다.
select a1.empno, a1.ename, a1.job
from emp a1, dept a2
where a1.deptno = a2.deptno and a2.loc = 'DALLAS';

ex)

-- SALES 부서에 근무하고 있는 사원들의 급여 평균을 가져온다.
select avg(a1.sal)
from emp a1, dept a2
where a1.deptno = a2.deptno and a2.dname = 'SALES';

ex)

-- 1982년 입사한 사원들의 사원번호, 이름, 입사일, 근무부서이름을 가져온다.
select a1.empno, a1.ename, a1.hiredate, a2.dname
from emp a1, dept a2
where a1.deptno = a2.deptno and a1.hiredate between '1982/01/01' and '1982/12/31';

ex)

-- 각 사원들의 사원번호, 이름, 급여, 급여등급을 가져온다.
select a1.empno, a1.ename, a1.sal, a1.sal, a2.grade
from emp a1, salgrade a2
where a1.sal between a2.losal and a2.hisal;

ex)

-- SALES 부서에 근무하고 있는 사원의 사원번호, 이름, 급여등급을 가져온다.
select a1.empno, a1.ename, a2.grade
from emp a1, salgrade a2, dept a3
where a1.sal between a2.losal and a2.hisal and a1.deptno = a3.deptno
    and a3.dname = 'SALES';

ex)

-- 각 급여 등급별 급여의 총합과 평균, 사원의수, 최대급여, 최소급여를 가져온다.
select sum(a1.sal), trunc(avg(a1.sal)), count(a1.sal), max(a1.sal), min(a1.sal)
from emp a1, salgrade a2
where a1.sal between a2.losal and a2.hisal
group by a2.grade;

ex)

-- 급여등급이 4등급인 사원들의 사원번호, 이름, 급여, 근무부서이름, 근무지역을 가져온다.
select a2.empno, a2.ename, a2.sal, a3.deptno, a3.loc
from salgrade a1, emp a2, dept a3
where a2.sal between a1.losal and a1.hisal and a2.deptno = a3.deptno and a1.grade = 4;

Comment and share

  • page 1 of 1

Hyeon Soo Ahn

author.bio


author.job