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;