OUTER조인은 어떤 집합을 기준으로 해서 조인되는 다른 집합과의 연결에 실패했더라도 그 결과를 추출하는 조인을 말한다. 이러한 형태의 조인은 실무에서 자주 등장하기도 하며 그 처리를 위해 우리는 약간의 주의를 기울일 필요가 있다.
아래의 예제는 ANSI SQL OUTER JOIN 비교 예제이다.(Altibase, Oracle)
Altibase iSQL> select A.*, B.*, C.* from out1B b left outer join out1A a on A.C1 = B.C1 AND A.C2 = B.C2, out1C c where c.c1 = 11; Oracle SQL> select A.*, B.*, C.* from out1A a, out1B b, out1C c where a.c1(+) = b.c1 AND a.c2(+) = b.c1 and c.c1 = 11; Altibase iSQL> select A.*, B.*, C.* from OUT1A A left outer join OUT1B B on B.C1 = A.C1 left outer join out1C c on c.c1 = a.c1; Oracle SQL> select A.*, B.*, C.* from out1A a, out1B b, out1C c where b.c1(+) = a.c1 and c.c1(+) = a.c1; Altibase iSQL> select k1.*, k2.*, k3.* from k3 left outer join k1 on k1.c3 = k3.c3 and k1.c4 = k3.c4, k2 where k1.c1 = k2.c1 and k1.c2 = k2.c2 and k1.c1 = 2; Oracle SQL> select k1.*, k2.*, k3.* from k1,k2,k3 where k1.c1 = k2.c1 and k1.c2 = k2.c2 and k1.c3(+) = k3.c3 and k1.c4(+) = k3.c4 and k1.c1 = 2;
SELECT X.COL1,X.COL2,X.COL4,Y.COL3 FROM TABLE1 X,TABL2 Y WHERE X.COL1=Y.COL1 AND X.COL3='B' AND Y.COL2='2';
SELECT X.COL1,X.COL2,X.COL4,Y.COL3 FROM TABLE1 X,TABL2 Y WHERE X.COL1=Y.COL1( + ) AND X.COL3='B' AND Y.COL2='2'
SELECT X.COL1,X.COL2,X.COL4,Y.COL3 FROM TABLE1 X,TABL2 Y WHERE X.COL1=Y.COL1( + ) AND X.COL3='B' AND Y.COL2(+)='2';
SELECT X.COL1,X.COL2,X.COL4,Y.COL3 FROM TABLE1 X,TABL2 Y WHERE X.COL1=Y.COL1( + ) AND X.COL3='B' AND Y.COL2(+) IN ('1','2');
SELECT X.COL1,X.COL2,X.COL4,Y.COL3 FROM TABLE1 X,TABL2 Y WHERE X.COL1=Y.COL1( + ) AND X.COL3='B' AND (Y.COL2='2' OR Y.COL2 IS NULL);
CREATE or REPLACE VIEW VIEW1 AS SELECT COL1, COL2, COL3 FROM TABLE2 WHERE COL2 IN ('1','2'); SELECT X.COL1, X.COL2, X.COL4, Y.COL3 FROM TABLE1 X, VIEW1 Y WHERE X.COL1=Y.COL1(+) and X.COL2='B';
SELECT X.COL1, X.COL2, X.COL4, Y.COL3 FROM TABLE1 X, (SELECT COL1, COL3 FROM TABLE2 WHERE COL2 IN ('1','2')) Y WHERE X.COL1=Y.COL1(+) and X.COL2='B';
SELECT A.부서코드,MIN(A.부서명),C.자재코드,MIN(C.자재명),SUM(D.의뢰수량) FROM 부서 A,구매의뢰 B,자재 C,구매의뢰자재내역 D WHERE C.자재구분='소모품' AND D.자재코드( + )=C.자재코드 AND A.위치='서울' AND B.부서코드=A.부서코드 AND B.의뢰일자 BETWEEN '19980101' AND '19980131' AND D.부서코드( + )=B.부서코드 AND D.일련번호( + )=B.일련번호 GROUP BY A.부서코드,C.자재코드
SELECT X.부서코드,MIN(X.부서명),Y.자재코드,MIN(Y.자재명),SUM(X.의뢰수량) FROM( SELECT A.부서코드,A.부서명,C.자재코드,C.의뢰수량 FROM 부서 A,구매의뢰 B,구매의뢰자재내역 C WHERE B.부서코드=A.부서코드 AND C.부서코드=B.부서코드 AND C.일련번호=B.일련번호 AND A.위치='서울' AND B.의뢰일자 BETWEEN '19980101' AND '19980131' ) X,자재 Y WHERE Y.자재코드=X.자재코드( + ) AND Y.자재구분='소모품' GROUP BY X.부서코드,X.자재코드