Notice
Recent Posts
Recent Comments
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Without haste, but without rest

4.4 조인(Join) – Equi, Non_Equi Join, Self Join 본문

삽질의 리포팅

4.4 조인(Join) – Equi, Non_Equi Join, Self Join

느린구름 2011. 7. 25. 17:04

오라클 클럽: 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;