- Join조건을 만족하지 않는 경우에도 다른 행들을 보기 위해 사용
- 한쪽 테이블에는 해당하는 데이터가 존재하는데 다른 쪽 테이블은 데이터가 존재하지 않을
경우 모두 데이터를 출력하게 하는 조인
- 조인시킬 값이 없는 즉 null행으로
결합하는(데이터가 없는 table) 쪽에 (+)연산자를 사용
- (+)를 사용하는 위치는 Join할
데이터가 부족한 쪽에 위치시킴
- Outer Join조건이 걸려있는 테이블에는 다른 조건절이 들어와도
똑같이
Out조인 연산자를 (+) 해주어야함
- left out join : 왼쪽 테이블이 기준
왼쪽 테이블의 자료는
모두 출력되고 오른쪽 테이블의 자료는 연결되는 것들만 출력
왼쪽 테이블 컬럼명 = 오른쪽 테이블 컬럼명(+);
- right outer join : 오른쪽 테이블이 기준
왼쪽 테이블의
컬럼명(+) = 오른쪽 테이블;
- 제약사항 : 표현식의 한측에만 올수 있는데 정보가 부재한 쪽에 둠
다른 테이블의 어떠한 컬럼에도 일치하지 않는 한
테이블의 행을 돌려줌
outer join을 포함하는 조건은 IN연산자를 사용할 수 없고, OR연산자에 의해 다른
하나의
조건에 연결하는 것이 불가능하고, SubQuery를 사용할 수 없음
- In/Or절 사용 해결 방안
* decode를 사용하여 각각의 조건에 대해 상수값을 지정하고 밖에서 조건별 상수값을
비교하는 방법으로 해결 가능
- SubQuery절 사용 해결 방안
두집합 사이에의 outer join은 에러를
발생시킴. 오라클 8i부터는 아래의 방법으로 해결가능
이런 경우 결과는 집합이지만 집합이 아니라는 것을 옵티마이저를 속이기위해 집합의
결과에
영향을 미치지 않는 문자열을 Concat 시키면 옵티마이저는 집합의 Outer Join이
아니라
상수와의 Outer Join으로 인식하고 에러를 발생시키지 않고 Outer Join의 결과를
정확히 나타냄
- 사원정보와 부서정보 출력
① select s.*,p.part_name
from part p, sawon
s
where s.part_code(+)=p.part_code;
② select s.*,p.part_name
from part p left outer
join sawon s
on s.part_code=p.part_code;
③ select s.*,p.part_name
from sawon s right
outer join part p
on s.part_code=p.part_code;
· sawon테이블
'Database > ORACLE' 카테고리의 다른 글
START WITH ~ CONNECT BY PRIOR 구문(계층 구조) (0) | 2013.01.31 |
---|---|
[오라클,ORACLE] 쿼리 실행 시간 (0) | 2013.01.22 |
오라클 UNION 사용 시 ORDER BY 처리 (2) | 2013.01.22 |
oracle 함수(산술, 문자열, 날짜, 날짜포맷 등) (0) | 2013.01.11 |
오라클 페이징 쿼리(Oracle paging query) (0) | 2012.08.14 |
오라클 쿼리 인덱스(ORACLE QUERY INDEX) (0) | 2012.08.14 |
다른 테이블과 JOIN하여 DELETE하기 (0) | 2012.08.14 |
오라클 내장함수 (0) | 2012.08.14 |
오라클 forms develope 개발 시 간단한 코드 모음 (1) | 2012.08.14 |
DB사용을 위한 오라클 설치/설정 (0) | 2012.08.14 |