삽질의 리포팅
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 |