위로
아래
JOIN
- 하나의 테이블로는 원하는 컬럼 정보를 참조할 수 없는 경우에 관련된 테이블을 논리적으로 결합하여
원하는 컬럼을 참조할 수 있는 방법 - 논리적으로 결합되는 2개 이상의 테이블에는 반드시 공통 컬럼이 존재해야 하며
2개의 컬럼은 데이터 타입과 공통된 데이터를 포함해야 한다.
EQUI조인
- JOIN이 없는 조인
- 옛날 조인이라 이제는 'JOIN'이라는 말이 실제로 쓰이는 표준 조인을 쓴다.
-- EQUI 조인
SELECT e.empno, e.ename, d.dname
FROM emp e, dept d;
cross조인
- 오라클이전 버전의 카르테시안(CARTESIAN)조인 기법의 명칭이 CROSS조인으로 바뀐것
- 2개 이상의 테이블이 공통 컬럼을 기준으로 결합되는 것이 아니라 순차적으로 읽혀지지는 형태
SELECT empno, ename, dname
FROM emp
CROSS JOIN dept;
-- 같은 결과 EQUI 조인
SELECT e.empno, e.ename, d.dname
FROM emp e, dept d;
natural 조인
- 2개 이상의 테이블이 공통 컬럼을 기준으로 논리적으로 결합되는 전형적인 조인기법
- EQUI 조인 기법과 같은 의미
- 서로 다른 테이블에 있는 컬럼들의 정보를 알고 싶을 때 쓰는 방법
- natural 조인시 공통 컬럼을 정의하지 않으면 오라클 서버는 해당 테이블의 모든 정보를 대상으로 공통컬럼을 분석하여 논리적으로 결합해 줌
-- 각 직원의 이름과 사원번호, 부서명을 알고 싶을 때 하는 방법
-- emp 테이블에는 부서명이 없고 부서 번호만 있음
-- dept 테이블에도 부서번호가 있으므로 두 개를 기준으로 조인함
SELECT empno, ename, dname, deptno
FROM emp
NATURAL JOIN dept;
-- 같은 결과
SELECT e.empno, e.ename, d.dname, d.deptno
FROM emp e, dept d
WHERE e.deptno = d.deptno;
JOIN ~ USING 절
SELECT e.empno, e.ename, d.dname
FROM emp e
JOIN dept d
USING (deptno);
JOIN ~ ON절 (left, right)
- 이전 버전에서 self조인기법과 동일한 기능
- 하나의 테이블에 2번 이상 반복적으로 사용되고 참조해야 할 컬럼이 자신의 테이블에 있는 다른 컬럼인 경우
- 하나의 테이블을 서로 다른 테이블처럼 논리적으로 결합하여 사용
SELECT e.empno, e.ename, e.mgr, d.ename
FROM emp e, emp d
WHERE e.mgr = d.empno;
SELECT e.empno, e.ename, e.mgr, d.ename
FROM emp e
JOIN emp d
ON e.mgr = d.empno;
outer조인
오라클 이전버전에서 사용되던 OUTER조인기법과 동일하고 향상된 기능이 추가
2개 이상의 테이블이 조인될 때 어느 한 쪽의 테이블에는 해당하는 데이터가 존재하는데, 다른 쪽 테이블에는 데이터가 존재하지 않을 경우 그 데이터는 출력되지 않는다. 이를 해결하기 위해 OUTER 조인 기법이 등장했다.
데이터가 존재하지 않는 쪽 테이블에 (+) 기호를 정의하면 데이터가 존재하든 하지 않은 테이블의 모든 데이터가 화면에 출력
Left Outer Join
Right Outer Join
SELECT empno, ename, d.deptno, dname
FROM emp e LEFT OUTER JOIN dept d
ON e.deptno = d.deptno
ORDER BY deptno;
SELECT empno, ename, d.deptno, dname
FROM emp e RIGHT OUTER JOIN dept d
ON e.deptno = d.deptno
ORDER BY deptno;