삽질의 리포팅

4.4 조인(Join) – CROSS JOIN, INNER JOIN, NATURAL JOIN, USING, ON

느린구름 2011. 7. 27. 17:05

오라클 클럽: http://www.oracleclub.com/lecture/1879

 

CROSS JOIN

  • Cartesian Product값을 얻을 때 사용

SELECT ename

FROM emp CROSS JOIN dept;

 

INNER JOIN

  • 일반 조인시 ,(콤마) 생략, INNER JOIN 추가, WHERE 절 대신 ON을 사용
  • INNER 생략 가능
  • 아래 두 조인 같은 결과

SELECT e.empno, e.ename

FROM dept d INNER JOIN emp e

ON d.deptno = e.deptno;

SELECT e.empno, e.ename

FROM dept d, emp e

WHERE d.deptno = e.deptno

 

NATURAL JOIN

  • Equi Join과 동일
  • 두 테이블의 동일한 이름을 가지는 컬럼 모두 조인
  • 동일 컬럼을 내부적으로 찾게 되므로 테이블 Alias를 주면 오류 발생
  • 동일한 컬럼 2개 이상일 경우 JOIN-USING문장으로 조인되는 컬럼 제어
  • 아래 두 조인 같은 결과

SELECT empno, ename, deptno

FROM emp NATURAL JOIN dept

SELECT e.empno, e.ename, d.deptno

FROM emp e, dept d

WHERE e.deptno = d.deptno

 

JOIN~USING

  • NATURAL JOIN의 단점은 동일한 이름을 가지는 컬럼 모두 조인
  • USING문을 사용하면 컬럼을 선택 가능
  • USING절 안에 포함되는 컬럼에 Alias지정시 오류 발생

SELECT e.empno, e.ename, deptno

FROM emp e JOIN dept d USING(deptno)

 

ON구문

  • 조인 조건을 지정
  • 모든 논리 연산 및 서브쿼리를 지정

SELECT e.empno, e.ename, e.sal

FROM emp e JOIN dept d ON (e.deptno = d.deptno)

JOIN bonus b ON (b.ename = e.ename)

WHERE e.sal IS NOT NULL