출처 : 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 
  FULL OUTER JOIN 은 양쪽 테이블 모두 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
블로그 이미지

잉비니

,