출처 : http://www.gurubee.net/lecture/1021
Outer Join 이란?
- Equi Join은 조인을 생성하려는 두 개의 테이블의 한쪽 컬럼에서 값이 없다면 데이터를 반환하지 못한다.
- 동일 조건에서 조인 조건을 만족하는 값이 없는 행들을 조회하기 위해 Outer Join 을 사용한다.
- Outer Join 연산자는 "(+)" 이다
- 조인시 값이 없는 조인 측에 "(+)"를 위치 시킨다.
- Outer Join 연산자는 표현식의 한 편에만 올 수 있다.
Outer Join 예제
Equi Join과 Outer Join의 비교
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | -- Equi Join 으로 부서 번호를 조회하는 예제 SELECT DISTINCT (e.deptno), d.deptno FROM emp e, dept d WHERE e.deptno = d.deptno; DEPTNO DEPTNO ------ ---------- 10 10 20 20 30 30 -- Outer Join 으로 부서 번호를 조회하는 예제 SELECT DISTINCT (e.deptno), d.deptno FROM emp e, dept d WHERE e.deptno(+) = d.deptno; DEPTNO DEPTNO ------- -------- 10 10 20 20 30 30 40 |
Outer Join을 사용하는 테이블에 추가로 조건절이 있다면 (+) 연산자를 모두 해야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | -- ename LIKE 조건절에 (+)연산자가 누락된 경우 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 -- ename LIKE 조건절에 (+)연산자를 추가해야 정상적으로 데이터가 조회 된다. 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 |
LEFT, RIGHT, FULL Outer Join
Oracle 9i 부터는 ANSI/ISO SQL 표준인 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN를 지원한다.
LEFT OUTER JOIN
LEFT OUTER JOIN 은 오른쪽 테이블(아래 예제에서 emp 테이블)에 조인시킬 컬럼의 값이 없는 경우 사용한다.
SELECT DISTINCT(e.deptno), d.deptno FROM dept d, emp e WHERE d.deptno = e.deptno(+);
1 2 3 4 5 | -- LEFT OUTER JOIN 조인 예제 SELECT DISTINCT (e.deptno), d.deptno FROM dept d LEFT OUTER JOIN emp e ON d.deptno = e.deptno; |
RIGHT OUTER JOIN
RIGHT OUTER JOIN 은 왼쪽테이블 (아래 예제에서 emp테이블)에 조인시킬 컬럼의 값이 없는 경우 사용한다.
SELECT DISTINCT(e.deptno), d.deptno FROM emp e, dept d WHERE e.deptno(+) = d.deptno;
1 2 3 4 5 | -- RIGHT OUTER JOIN 조인 예제 SELECT DISTINCT (e.deptno), d.deptno FROM emp e RIGHT OUTER JOIN dept d ON e.deptno = d.deptno; |
FULL OUTER JOIN
1 2 3 4 5 | -- FULL OUTER JOIN 조인 예제 SELECT DISTINCT (e.deptno), d.deptno FROM emp e FULL OUTER JOIN dept d ON e.deptno = d.deptno; |
'이전것 > 데이터베이스' 카테고리의 다른 글
4.5. 트랜잭션 (commit, rollback) (0) | 2016.11.15 |
---|---|
4.4.3. CROSS JOIN, ON (0) | 2016.11.15 |
4.4.1. Equi Join, Non_Equi Join, Self Join (0) | 2016.11.15 |
4.3. 예명 (Alias) (0) | 2016.11.14 |
4.2. SELECT문 및 연산자 (0) | 2016.11.14 |