시소당
코드 테이블인 tab1과 이를 참조하는 tab2를 조인하여 코드값에 해당하는 tab2의 자료를 조회하고 싶은 경우의 예이다.
select x.key, x.fld1, y.key, y.col1, y.col2
from tab1 x, tab2 y
where x.key = y.key(+)
and x.fld1 > ‘aaa’
and y.col1 = 10;
이 경우는 tab1에 null이 있기 때문에 원하는 결과가 나오지 못한다. 그러므로 다음과 같이 변형한다.
select x.key, x.fld1, y.key, y.col1, y.col2
from tab1 x, tab2 y
where x.key = y.key(+)
and x.fld1 > ‘aaa’
and (y.col1 = 10 or y.col is null);
로 바꾸면 원하는 결과를 얻을 수 있다. 그러나 null이 있기 때문에 인덱스를 사용하지 못한다.
<개선안>
select x.key, x.fld1, y.key, y.col1, y.col2
from tab1 x, tab2 y
where x.key = y.key(+)
and x.fld1 > ‘aaa’
and y.col1(+) = 10;
(+)기호가 붙지 않은 테이블부터 풀리게 되며 (+)기호가 붙은 쪽 테이블의 모든 컬럼에 (+)기호를 붙여 주어야 한다. 왜냐하면 (+)기호가 붙은 쪽의 컬럼에 의해 걸러져 버리기 때문이다.
 Outer join에서 in의 사용
In 연산자는 아우터 조인에서 사용하지 못하므로 다음과 같이 In-Line View를 사용하여 변형한다.
예) select x.key, x.fld1, y.key, y.col1, y.col2
from tab1 x, tab2 y
where x.key = y.key(+)
and x.fld1 > ‘aaa’
and y.col1(+) in (10,30,50);
은 사용되지 못한다. (in, between, like, or연산자는 아우터조인과 사용하지 못함)
<해결안>
select x.key, x.fld1, y.key, y.col1, y.col2
from tab1 x, (select key, col1, col2
from tab2
where col1 in (10,30,50)) y
where x.key = y.key(+)
and x.fld1 > ‘aaa’;