join : 여러 개의 테이블에 있는 컬럼들을 하나의 결과 값으로 보고자 할 때 사용

ex) 이름, 부서위치를 출력한다.

from emp, dept

    - where 조인을 하기 위한 조건(emp와 dept의 다리 역할을 한다)

  • equi join : 조인하려는 두 테이블 사이의 연결고리가 같은 경우
select e.ename, d.loc
from emp e, dept d
where e.deptno = d.deptno;

    - from 절에서 테이블 별칭으로 e, d 를 정해줬기 때문에 다른 문장에서도 e와 d 를 사용해야 한다. 

 

  • no equi join : 조인 조건이 = 조건이 아니기 때문에 non equi join이다.
    emp 테이블과 salgrade 테이블을 조인해서 이름, 월급, 등급을 출력한다.
select e.ename, e.sal, s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal;

    - emp 테이블의 월급은 salgrade 테이블의 가장 작은 값인 700과 가장 큰 값인 9999 사이에 있다.

 

  • ntile 함수 : 등급을 출력하는 데이터 분석함수
select ename, sal, ntile(4) over(order by sal desc)grade
from emp;
 

    - sal 을 높은 순서대로 25%씩 4등급으로 나눈다.

 

  • 3개의 테이블 조인 : 조인 조건이 두 개가 필요하다.
    ex) 이름, 부서위치, 월급, 급여 등급을 출력한다.
select e.ename, d.loc, e.sal, s.grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal;

    - dept ↔ emp ↔ salgrade 로 연결

 

  • outer join : equi join으로 조인했을 때 볼 수 없는 결과를 볼 때 사용(+)
    ex) 부서위치, 부서위치별 월급의 총합을 출력한다.
select d.loc, sum(e.sal) 
from emp e, dept d
where e.deptno = d.deptno 
group by d.loc;

    - 부서번호 40번이 emp 테이블에 없어서 dept 테이블의 BOSTON 이 출력되지 않는다. BOSTON 이 출력되게 하려면 outer join을 사용해야 한다.

 

ex)

select d.loc, sum(e.sal)
from emp e, dept d
where e.deptno (+)= d.deptno
group by d.loc;

    - 부족한 쪽에 (+) 를 써준다. (emp 테이블에 40번이 없기 때문에 emp 테이블의 data 가 부족한 것이다)

    - 만약 deptno 테이블의 data 가 부족하다면 e.deptno = d.deptno(+) 로 써준다.

 

  • self join : 자기 자신의 테이블과 조인하는 문법

from emp 사원, emp 관리자

 

  • 1999 ansi 조인 문법
    1) using 절을 사용한 조인
    2) on 절을 사용한 조인
    3) natural join
    4) left / right / full outer join
    5) cross join
  • on 절을 사용한 조인
select e.ename, d.loc
from emp e join dept d on(e.deptno=d.deptno);

  • using 절을 사용한 조인 문법
select e.ename, d.loc
from emp e join dept d using(deptno);

    - using 안에 연결고리가 되는 컬럼을 입력한다.

    - using 안에 별칭을 입력하면 안된다( ex) using(e.deptno) )

 

  • natural 조인 문법 : 알아서 연결고리인 컬럼을 찾아 조인을 수행한다.
select e.ename, d.loc
from emp e natural join dept d;

 

  • left / right / full outer join
    - left outer join : 오른쪽 테이블에 조인 할 컬럼의 값이 없는 경우에 사용한다.
    - right outer join : 왼쪽 테이블에 조인 할 컬럼의 값이 없는 경우에 사용한다.
    ex) 오라클 조인 문법과 비교
select e.ename, d.loc
from emp e, dept d
where e.deptno(+)=d.deptno;

    ex) 1999 ANSI 조인 문법

select e.ename, d.loc
from emp e right outer join dept d
on(e.deptno=d.deptno);

  • cross join : 연결고리없이 전부 조인시키는 문법
select e.ename, d.loc
from emp e cross join dept d;

             .

             .

             .

'Database > SQL' 카테고리의 다른 글

5. 그룹함수  (1) 2020.02.17
4. 변환함수 및 조건부 표현식 이용  (0) 2020.02.11
3. 단일행 함수  (0) 2020.02.05
2. 데이터 제한 및 정렬  (0) 2020.02.01
1. 데이터 검색  (0) 2020.01.17

+ Recent posts