07.JOIN
by SANGGI JEON
JOIN
- 둘 이상의 테이블을 합쳐서 하나의 큰 테이블로 만드는 방법
- 필요성
- 관계형 모델에서는 데이터의 일관성이나 효율을 위하여 데이터의 중복을 최소화(정규화)
- Foreign Key를 이용하여 참조
- 정규화된 테이블로부터 결합된 형태의 정보를 추출할 필요가 있음
- JOIN의 종류
CROSS JOIN | 모든 가능한 쌍이 나타남 |
---|---|
THETA JOIN | 조건(Theta)에 의한 조인 (=, <, > 등) |
EQUI JOIN | THETA JOIN에서 조건이 Equal(=)인 경우 |
NATURAL JOIN | EQUI JOIN에서 중복되는 Column이 하나로 합쳐지는 경우 |
INNER JOIN | 조건을 만족하는 튜플만 나타남 |
OUTER JOIN | 조건을 만족하지 않는 튜플(짝이 없는 튜플)도 NULL과 함께 나타남 |
SELF JOIN | 자기 자신과 조인 |
1. 카티션 프로덕트(Cartesian Product)
-
수학적으로는 카티션 프로덕트, JOIN에서는 CROSS JOIN이라고함
-
두 테이블의 행들의 가능한 모든 쌍이 추출됨
- \[X*Y = {(x,y)|x∈X and y∈Y}\]
SELECT e.ename, d.dname
FROM emp e, dept d;
1.1 EQUI JOIN
- 카티션 프로덕트를 막기 위해 WHERE 절을 이용할 수 있음
- 옛날 표현
SELECT e.ename, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
1.2. NATURAL JOIN
SELECT e.ename, d.dname
FROM emp e NATURAL JOIN dept d
1.3 INNER JOIN
- EQUI JOIN의 새로운 표현 방법
- 복잡한 JOIN문에서 on에서 join 조건을 따로 명시하기 때문에 구분하기 편함
SELECT e.ename, d.dname
FROM emp e INNER JOIN dept d
on e.deptno = d.deptno
WHERE d.dname = 'RESEARCH';
- inner를 생략해도 가능
SELECT e.ename, d.dname
FROM emp e JOIN dept d
on e.deptno = d.deptno
WHERE d.dname = 'RESEARCH';
1.4. OUTER JOIN
- RIGHT OUTER JOIN : 오른쪽 테이블을 기준
SELECT e.ename, d.dname
FROM emp e RIGTH OUTER JOIN dept d
on e.deptno = d.deptno;
- LEFT OUTER JOIN : 왼쪽 테이블 기준
SELECT e.ename, d.dname
FROM emp e LEFT OUTER join dept d
on e.deptno = d.deptno;
1.5. SELF JOIN
- 자시 자신과 JOIN
- Alias를 사용할 수 밖에 없음
SELECT e2.empno, e2.ENAME, e1.empno, e1.ename
FROM emp e1 RIGHT join emp e2
on e2.mgr = e1.empno;
Subscribe via RSS