join : 여러 개의 테이블에 있는 컬럼들을 하나의 결과 값으로 보고자 할 때 사용
ex) 이름, 부서위치를 출력한다.
- 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 : 자기 자신의 테이블과 조인하는 문법
- 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 |