1. equi join
2. non equi join
3. outer join
4. self join
조인이란?
여러개의 테이블의 컬럼들을 하나의 결과로 볼 때 사용하는 SQL 문법
1. equi join - 조인 조건에서 사용하는 연산자가 = 인 경우
예제) 이름, 부서위치를 출력하시오
select e. ename, d.loc
from emp e, dept d
where e.deptno = d.deptno;
-> where절에 조인 조건을 준다.
만약에 조인 조건을 주지 않는다면
하나씩 다 조인한다.
2. non equi join - 조인하려는 두 테이블 사이의 연결고리 연산자가 =이 아닌경우의 조인
예제) 이름, 월급, 등급을 출력하시오
-> 등급 테이블 생성
create table salgrade
( grade number(10),
losal number(10),
hisal number(10) );
insert into salgrade values(1,700,1200);
insert into salgrade values(2,1201,1400);
insert into salgrade values(3,1401,2000);
insert into salgrade values(4,2001,3000);
insert into salgrade values(5,3001,9999);
commit;
-> SQL 쿼리
select e.ename, e.sal, s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal;
문제) 위의 결과에서 급여 등급이 5등급인 사원들만 출력하시오
select e.ename, e.sal, s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal
and s.grade =5;
-> where절에 조인조건 쓴 후에 조건 쓰면 된다.
※ 여러개의 테이블 조인하기
dept -------------------- emp -------------------- salgrade
조인연결고리 조인연결고리
↓ ↓
e.deptno = d.deptno e.sal between s.losal and s.hisal
테이블 n개를 조인하려면 조인 연결고리가 (n-1)개 있어야 한다.
문제) 이름, 월급, 부서위치, 급여등급을 출력하시오
select e.ename, e.sal, d.loc, s.grade
from emp e, dept d, salgrade s
where e.deptno=d.deptno and e.sal between s.losal and s.hisal;
3. outer join - equi join으로는 볼 수 없는 결과를 볼 때 사용하는 조인 문법
-> dept테이블 확인
select *
from dept;
-> 이름과 부서위치를 출력해라
select e.ename, d.loc
from emp e, dept d
where e.deptno = d.deptno;
=> dept 테이블에 BOSTON이 존재하지만 BOSTON은 출력되지 않음
emp 테이블에는 deptno가 40번 부서번호를 갖는 사원이 없어서 조인이 안됐다.
따라서 BOSTON에 부서가 있다는 정보도 출력되지 않았다.
BOSTON이 나오게 하려면?
select e.ename, d.loc
from emp e, dept d
where e.deptno(+) = d.deptno;
부족한 쪽 조인조건데 (+) 표시를 해주면 된다.
4. self join - 자기 자신의 테이블과 조인하는 문법
예제) 사원 테이블의 조직도를 확인하시오
select empno, ename, mgr
from emp;
7566은 FORD의 관리자인 JONES에게는 사원번호이지만
JONES의 부하인 FORD에게는 MGR번호이다.
문제) 사원이름, 그 사원의 관리자의 이름을 출력하시오
select e.ename, m.ename as 관리자
from emp e, emp m
where e.mgr = m.empno;