Without haste, but without rest
4.4 조인(Join) – Equi, Non_Equi Join, Self Join 본문
오라클 클럽: http://www.oracleclub.com/lecture/1020
조인(Join)이란?
- 둘 이상의 테이블을 연결하여 데이터 검색
- 보통 둘 이상의 행들의 공통된 값 Primary Key 및 Foreign Key값을 사용하여 조인
- 두 개의 테이블을 SELECT문장 안에서 조인 하려면 적어도 하나의 컬럼이 두 테이블 사이에서 공유
조인 방법
- Equi Join(동등 조인, 내부 조인)
- Non-equi Join
- Outer Join
- Self Join
Cartesian Product(카티션 곱)
- 검색하고자 했던 데이터뿐 아니라 조인에 사용된 테이블들의 모든 데이터가 반환 되는 현상
- Cartiesian Product는 다음과 같은 경우 발생
*조인 조건을 정의하지 않았을 경우
*조인 조건이 잘못된 경우
*첫 번째 테이블의 모든 행들이 두 번째 테이블의 모든 행과 조인 되는 경우
*테이블 개수가 N이면 Cartesian Product를 피하기 위해서는 적어도 N-1개의 등가 조건을 SELECT문안에 포함시켜 다른 테이블 안에 있는 각 테이블의 컬럼이 적어도 한번은 참조되도록 해야 함.
Equi Join
- 조건절 Equality Condition(=)에 의하여 조인
- Equi Join의 성능을 높이기 위해 Index기능 사용
SELECT e.ename, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
Non-Equi Join
- Non-equi Join 테이블의 어떤 column도 Join할 테이블의 column에 일치 하지 않을 때 사용
- 조인조건은 동등(=)이외의 연산자를 갖음
- BETWEEN AND, IS NULL, IS NOT NULL, IN, NOT IN
SELECT e.ename, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
Self Join
- Equi Join과 같으나 하나의 테이블에서 조인이 일어남
- 같은 테이블에 대해 두 개의 alias를 사용하여 FROM절에 두 개의 테이블을 사용하는 것처럼 조인
SELECT e.name, a.ename "Manager"
FROM emp e, emp a
WHERE e.empno = a.mgr;