본문 바로가기

Computer Engineering/DB

Equi Join, Non_Equi Join, Self Join

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

이름과 급여를 연결시켜서 보여줍니다.