개발 등/ORACLE

[펌] OUTER JOIN

darkhorizon 2010. 8. 3. 20:39
728x90
반응형

Outer Join (LEFT, RIGHT, FULL OUTER JOIN)
Outer(외부) Join
- Equi Join 문장들의 한 가지 제약점은 그것들이 조인을 생성하려 하는 두 개의 테이블의 두 개 컬럼에서 공통된 값이 없다면 테이블로부터 테이터를 반환하지 못하는 것이다.
- 정상적으로 조인 조건을 만족하지 못하는 행들을 보기위해 Outer Join을 사용 한다. Outer Join 연산자는 "(+)" 이다.
- 조인시킬 값이 없는 조인측에 "(+)"를 위치 시킨다.
- Outer Join 연산자는 표현식의 한 편에만 올 수 있다.

Outer Join 예제

-- 예제1) 일반 조인의 경우
SQL> SELECT DISTINCT(a.deptno), b.deptno
FROM emp a, dept b
WHERE a.deptno = b.deptno

DEPTNO DEPTNO
------ ----------
10 10
20 20
30 30

-- 예제2) Outer Join을 했을 경우
SQL> SELECT DISTINCT(a.deptno), b.deptno
FROM emp a, dept b
WHERE a.deptno(+) = b.deptno

DEPTNO DEPTNO
------- --------
10 10
20 20
30 30
40

-- 다음의 쿼리를 한번 잘 살펴보기 바란다.
SQL> SELECT DISTINCT(a.deptno), b.deptno
FROM emp a, dept b
WHERE a.deptno(+) = b.deptno
AND a.ename LIKE '%';

DEPTNO DEPTNO
---------- ----------
10 10
20 20
30 30

-- 쿼리 결과를 잘 보면 Outer Join이 되지 않은 것을 알 수 있다.
-- 위 쿼리를 Outer Join 시키기 위해서는 아래와 같이 고쳐야 한다.
SQL> SELECT DISTINCT(a.deptno), b.deptno
FROM emp a, dept b
WHERE a.deptno(+) = b.deptno
AND a.ename(+) LIKE '%'

DEPTNO DEPTNO
---------- ----------
10 10
20 20
30 30
40

-- Outer Join 조건이 걸려있는 테이블에는 다른 조건절이 들어와도
-- 똑같이 Outer Join 연산자인 (+)를 해주어야 한다.

표준 Outer Join

Oracle9i 부터는 ANSI/ISO SQL 표준인 LEFT OUTER JOIN , RIGHT OUTER JOIN, FULL OUTER JOIN를 지원 한다.

LEFT OUTER JOIN과 RIGHT OUTER JOIN의 테이블 순서를 바꾸어 가면서 테스트를 하시면 쉽게 이해를 할 수 있다.
LEFT OUTER JOIN

오른쪽 테이블(아래 예제에서 emp 테이블)에 조인시킬 컬럽의 값이 없는 경우 사용한다.

SQL> SELECT DISTINCT(e.deptno), d.deptno
FROM dept d LEFT OUTER JOIN emp e
ON d.deptno = e.deptno;

RIGHT OUTER JOIN

왼쪽 테이블(아래 예제에서 emp 테이블)에 조인시킬 컬럽의 값이 없는 경우 사용한다.

SQL> SELECT DISTINCT(e.deptno), d.deptno
FROM emp e RIGHT OUTER JOIN dept d
ON e.deptno = d.deptno;

FULL OUTER JOIN

양쪽 테이블에 다 Outer Join을 거는것을 TWO-WAY OUTER JOIN 또는 FULL OUTER JOIN이라 한다.

SQL>SELECT DISTINCT(a.deptno), b.deptno
FROM emp a FULL OUTER JOIN dept b
ON a.deptno = b.deptno;

문서에 대하여
- 작성자 : 김정식 (oramaster _at_ naver.com)
- 작성일 : 2002-01-20
- 강좌 URL : http://www.oracleclub.com/lecture/1021
728x90