by 김정식 OUTER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN [2002.01.20]
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
Oracle9i 부터는 ANSI/ISO SQL 표준인 LEFT OUTER JOIN , RIGHT OUTER JOIN, FULL 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 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 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;
- 강좌 URL : http://www.gurubee.net/lecture/1021
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.
좋은 강좌 감사합니다.
오타정정 건의입니다. 글 하단부에
LEFT OUTERL JOIN은 오른쪽 테이블... -> OUTER
RIGHT OUTERL JOIN은 왼쪽 테이블... -> OUTER
FULL OUTERL JOIN은 양쪽 테이블... -> OUTER
가 아닌지요?
아 정말 감사합니다.
left join 으로 하다가 옛날쿼리에서 (*) 이게 나와가지고 이걸로 코딩 하는데 자꾸 아우터 조인이 안되는데
추가 조건절에도 (+) 연산자를 붙일 줄은 생각도 못했습니다. 하... 아까운 내 시간 ㅠㅠ
감사합니다 덕분에 해결 했습니다.