블로그 이미지
가야금마스터

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

Tag

2015. 3. 16. 13:34 DB/오라클 SQL 명령어

Outer Join 이란?

- Equi Join은 조인을 생성하려는 두 개의 테이블의 한쪽 컬럼에서 값이 없다면 테이터를 반환하지 못한다.

- 동일 조건에서 조인 조건을 만족하는 값이 없는 행들을 조회하기 위해 Outer Join을 사용 한다.

- Outer Join 연산자는 "(+)" 이다.

- 조인시 값이 없는 조인측에 "(+)"를 위치 시킨다.

- Outer Join 연산자는 표현식의 한 편에만 올 수 있다.

Outer Join 예제

Equi Join과 Outer Join의 비교.


-- Equi Join 으로 부서 번호를 조회하는 예제

SELECT DISTINCT(e.deptno), d.deptno, d.dname

  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을 사용하는 테이블에 추가로 조건절이 있다면 (+)연산자를 모두 해야 한다.


======================================================================


-- 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

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


LEFT OUTER JOIN

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



-- 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 OUTERL JOIN은 왼쪽 테이블(아래 예제에서 emp테이블)에 조인시킬 컬럼의 값이 없는 경우 사용한다.


DEPTNO  DEPTNO

 ------- --------

     10       10

     20       20

     30       30

              40


======================================================================


-- 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 OUTERL JOIN은 양쪽 테이블 모두 Outer Join걸어야 하는 경우 사용 한다.


DEPTNO  DEPTNO

 ------- --------

     10       10

     20       20

     30       30

              40

======================================================================


-- FULL OUTER JOIN 조인 예제

SELECT DISTINCT(e.deptno), d.deptno

  FROM emp e 

  FULL OUTER JOIN dept d

    ON e.deptno = d.deptno;


DEPTNO  DEPTNO

 ------- --------

     10       10

     20       20

     30       30

              40


출처 : 구루비

'DB > 오라클 SQL 명령어' 카테고리의 다른 글

오라클 AUTO_INCREMENT (인서트 자동증가)  (0) 2015.03.19
날짜 명령어 사용 예  (0) 2015.03.16
날짜관련 명령어  (0) 2015.03.16
NULL 치환 법 ( NVL & NVL2 ) OR DECODE  (0) 2015.03.16
Decode & Case  (0) 2015.03.16
posted by 가야금마스터