4.4.2. Outer Join (LEFT, RIGHT, FULL OUTER JOIN)
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테이블)에 조인시킬 컬럼의 값이 없는 경우 사용한다.
-- 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걸어야 하는 경우 사용 한다.
-- FULL OUTER JOIN 조인 예제
SELECT
DISTINCT
(e.deptno), d.deptno
FROM
emp e
FULL
OUTER
JOIN
dept d
ON
e.deptno = d.deptno;
'Database > Oracle SQL' 카테고리의 다른 글
5.1. Numeric Functions (숫자형 함수) (0) | 2019.04.17 |
---|---|
4.6. Commit과 Rollback 예제 (0) | 2019.04.17 |
4.5. 트랜잭션(commit과 rollback) (0) | 2019.04.17 |
4.4.3. CROSS JOIN, INNER JOIN, NATURAL JOIN, USING, ON (0) | 2019.04.17 |
4.4.1. Equi Join, Non_Equi Join, Self Join (0) | 2019.04.17 |
4.3. 예명(Alias) (0) | 2019.04.17 |
4.2. SELECT문 및 연산자 (0) | 2019.04.17 |
4.1.1. MERGE 문의 이해 및 활용 (0) | 2019.04.17 |