Equi Join, Non_Equi Join, Self Join
조인(Join) ?
◈ 둘이상의 테이블을 연결하여 데이터를 검색하는 방법 입니다.
◈ 보통 둘 이상의 행들의 공통된 값 Primary Key 및 Foreign Key 값을 사용하여 조인 합니다.
◈ 그러므로 두 개의 테이블을 SELECT문장 안에서 조인하려면 적어도 하나의 컬럼이
그 두 테이블 사이에서 공유 되어야 합니다..
● 조인 방법
- Equijoin(동등 조인, 내부조인) - Non-equijoin - Outer join - Self join
|
Cartesian Product(카티션 곱)
검색하고자 했던 데이터뿐 아니라 조인에 사용된 테이블들의 모든 데이터가 Retrun되는 현상
● Cartesian product는 다음과 같은 경우에 발생됩니다.
- 조인 조건을 정의하지 않았을경우
- 조인 조건이 잘못된 경우
- 첫 번째 테이블의 모든 행들이 두 번째 테이블의 모든 행과 조인이 되는 경우
- 테이블의 개수가 N이라면 Cartesian product를 피하기 위해서는 적어도 N-1개의 등가 조건을 SELECT 문안에 포함시켜서 다른 테이블 안에 있는 각 테이블의 컬럼이 적어도 한번은 참조되도록 해야 합니다.
|
☞ Equi Join
- 조건절 Equality Condition(=)에 의하여 조인이 이루 집니다.
- Equi join의 성능을 높이기 위해서는 Index 기능을 사용하는 것이 좋습니다.
|
SQL>SELECT e.ename, d.dname FROM emp e , dept d WHERE e.deptno = d.deptno;
- WHERE 절에 조인 조건을 작성하고 column명 앞에 테이블명을 적습니다. |
☞ Non-Equijoin
- Non-equijoin은 테이블의 어떤 column도 join할 테이블의 column에 일치하지 않을 때 사용하고 조인조건은 동등( = )이외의 연산자를 갖습니다. (BETWEEN AND, IS NULL, IS NOT NULL, IN, NOT IN)
|
SQL>SELECT e.ename, d.dname FROM emp e, dept d WHERE e.sal BETWEEN 3000 AND 4000; ENAME DNAME ----------------- ----------- SCOTT ACCOUNTING FORD ACCOUNTING SCOTT RESEARCH FORD RESEARCH |
☞ Self Join
- Equi Join과 같으나 하나의 테이블에서 조인이 일어나는 것이 다름니다.
- 같은 테이블에 대해 두 개의 alias를 작성함으로 FROM절에 두 개의 테이블을 사용 하는 것과 같이 합니다.
|
SQL> SELECT concat(a.ename,' ') ||' : \'|| b.sal 급여 FROM emp a, emp b WHERE a.empno = b.empno
급여 ------------------- SMITH : \800 ALLEN : \1600 WARD : \1250 JONES : \2975 MARTIN : \1250 BLAKE : \2850 CLARK : \2450 SCOTT : \3000
이름과 급여를 연결시켜서 보여줍니다. |