Outer Join..
두개의 테이블에서 공통된 컬럼이 없거나 또는 컬럼에서 같은 값이 없다면 JOIN문을 사용하여도 원하는 결과값을 얻어오지 못한 다. 때문에 한쪽의 값이 없더라도(null) 결과값이 나올 수 있게 해주는 조건문이다.
어느 한쪽의 컬럼을 기준으로 공통된 값을 얻어 오고, 공통된 값이 없더라도 기준이 되는 컬럼만큼은 결과값으로 찾아오게 된다.
LEFT OUTER JOIN / RIGHT OUTER JOIN / FULL OUTER JOIN / (+) 처리
일반 JOIN문 예제 )
SELECT * FROM MAX, BLOG WHERE MAX.A = BLOG.D;
처럼 하면 결과값은...MAX테이블의 A컬럼과 BLOG테이블의 D컬럼 중
같은 값을 가지고 있는 것을 찾아서 보여준다.
OUTER JOIN문 예제 )
SELECT * FROM MAX LEFT OUTER JOIN BLOG ON MAX.A = BLOG.D;
의 결과값은... MAX 테이블의 모든 것을 보여주고 조건을 걸었던 A컬럼과 D컬럼의 같은값인..
2 를 가지고 있는 컬럼을 붙여..
이렇게 보여준다.
일반 JOIN 과 OUTER JOIN과의 차이로 무엇을 보셨는가?
그렇습니다~. MAX 테이블과 BLOG테이블의 컬럼값이 같이 않더라도 MAX 테이블의 값은 다 보여줍니다.
위와 같은 OUTER JOIN문을 LEFT OUTER JOIN문이라고 한다.
LEFT OUTER JOIN
SELECT 보여줄컬럼명 FROM 기본테이블명 LEFT OUTER JOIN 조인할테이블명 ON 기본테이블의컬럼명 = 조인할테이블의컬럼명;
또는... (+) 를 사용하여.. (+) 는 기본테이블의 반대쪽에 붙여주면 된다.
SELECT 보여줄컬럼명 FROM 기본테이블명, 조인할테이블명 WHERE 기본테이블의컬럼명 = 조인할테이블의컬럼명(+);
처럼 사용해도 된다.
예제 ) LEFT OUTER JOIN
SELECT A,C,E,F FROM MAX LEFT OUTER JOIN BLOG ON MAX.C = BLOG.F;
또는...
SELECT A,C,E,F FROM MAX, BLOG WHERE MAX.C = BLOG.F(+);
A,C,E,F 컬럼을 보여주며, MAX 테이블에 BLOG테이블을 JOIN하여 C컬럼을 기준으로 하여 F컬럼과 비교, 값이 같은 컬럼을 찾아온다.
RIGHT OUTER JOIN
RIGHT OUTER JOIN은 위의 LEFT OUTER JOIN과 크게 다를바 없다.
다만 LEFT(왼쪽)이 아닌 RIGHT(오른쪽)을 기준테이블로 삼는다는 것 뿐이다.
SELECT 보여줄컬럼명 FROM 조인할테이블명 RIGHT OUTER JOIN 기본테이블명 ON 조인할테이블의컬럼명 = 기본테이블의컬럼명 ;
또는... (+) 를 사용하여.. (+) 는 기본테이블의 반대쪽에 붙여주면 된다.
SELECT 보여줄컬럼명 FROM 기본테이블명, 조인할테이블명 WHERE 조인할테이블의컬럼명(+) = 기본테이블의컬럼명;
예제)
SELECT * FROM MAX RIGHT OUTER JOIN BLOG ON MAX.C = BLOG.F;
또는...
SELECT * FROM MAX, BLOG WHERE MAX.C(+) = BLOG.F;
모든(*) 컬럼을 찾아 보여주며, BLOG테이블을 기준으로 MAX테이블을 JOIN하여 F컬럼을 기준으로 MAX.C 컬럼과 비교, 같은 값의 행들을 찾는다.
FULL OUTER JOIN
FULL OUTER JOIN은 왼쪽과 오른쪽 모두에게 JOIN을 거는 것이다.
SELECT 보여줄컬럼명 FROM 기본테이블명 FULL OUTER JOIN 조인할테이블명 ON 기본테이블의컬럼명 = 조인할테이블의컬럼명;
예제)
SELECT * FROM MAX FULL OUTER JOIN BLOG ON MAX.C = BLOG.F;
'DB' 카테고리의 다른 글
[Oracle] ORA-28001: the password has expired (0) | 2012.07.29 |
---|---|
ORA-00600 에러 (0) | 2012.07.29 |
UNION ALL (0) | 2012.07.29 |
oracle과 sybase의 차이점 (0) | 2012.07.29 |
마스터 디테일 구조에서 order by (0) | 2012.07.29 |