Oracle OuterJoin(Left/Right/Full) (+) 고찰


A Table
tUid
NAME
1
kkk
2
bbb
3
ccc
1
jjj

B Table tUid tMax tMin 1 48 31 2 88 27 2 75 23 1 80 29 1 94 19 4 35 11

[CODE type=oracle8]SELECT * FROM A, B
WHERE
A.TUID = B.TUID;[/CODE]

TUID NAME TUID TMAX TMIN
----------- ---- ----------- ----------- -----------
1 kkk 1 48 31
1 jjj 1 48 31
1 kkk 1 80 29
1 jjj 1 80 29
1 kkk 1 94 19
1 jjj 1 94 19
2 bbb 2 88 27
2 bbb 2 75 23

8 rows selected.


[CODE type=oracle8]SELECT * FROM A, B
WHERE
A.TUID(+) = B.TUID;[/CODE]

TUID NAM TUID TMAX TMIN
----------- --- ----------- ----------- -----------
1 kkk 1 48 31
1 jjj 1 48 31
1 kkk 1 80 29
1 jjj 1 80 29
1 kkk 1 94 19
1 jjj 1 94 19
2 bbb 2 88 27
2 bbb 2 75 23
4 35 11

9 rows selected.


[CODE type=oracle8]SELECT * FROM A, B
WHERE
A.TUID = B.TUID(+);[/CODE]

TUID NAM TUID TMAX TMIN
----------- --- ----------- ----------- -----------
1 kkk 1 48 31
1 kkk 1 80 29
1 kkk 1 94 19
1 jjj 1 48 31
1 jjj 1 80 29
1 jjj 1 94 19
2 bbb 2 88 27
2 bbb 2 75 23
3 ccc

9 rows selected.

-- 단지 일반 Join에서 (+)기호가 붙지 않은 Table에 Join되지 않은 값만 출력 됨


[CODE type=oracle8]SELECT * FROM A LEFT OUTER JOIN B
On
A.TUID = B.TUID;[/CODE]

TUID NAM TUID TMAX TMIN
----------- --- ----------- ----------- -----------
1 jjj 1 48 31
1 kkk 1 48 31
2 bbb 2 88 27
2 bbb 2 75 23
1 jjj 1 80 29
1 kkk 1 80 29
1 jjj 1 94 19
1 kkk 1 94 19
3 ccc

9 rows selected.

-- Right Table에서 Left Table로 1:1 대입후 Left Table의 Join되지 않는 값은 출력된다.
잘보면 kkk보다 밑에있는 jjj값부터 출력이 되었다.
Outer Join을 하면 마지막 테이블서부터 Join을 한다는 것을 알 수 있다.


[CODE type=oracle8]SELECT * FROM A FULL OUTER JOIN B
On
A.TUID = B.TUID;[/CODE]


TUID NAM TUID TMAX TMIN
----------- --- ----------- ----------- -----------
1 jjj 1 48 31
1 kkk 1 48 31
2 bbb 2 88 27
2 bbb 2 75 23
1 jjj 1 80 29
1 kkk 1 80 29
1 jjj 1 94 19
1 kkk 1 94 19
3 ccc
4 35 11

10 rows selected.

-- Right Table에서 Left Table로 1:1 대입후 Full(Left/Right) Table의 Join되지 않는 값은 출력된다.


[CODE type=oracle8]SELECT * FROM A RIGHT OUTER JOIN B
On
A.TUID = B.TUID;[/CODE]

TUID NAM TUID TMAX TMIN
----------- --- ----------- ----------- -----------
1 kkk 1 94 19
1 kkk 1 80 29
1 kkk 1 48 31
2 bbb 2 75 23
2 bbb 2 88 27
1 jjj 1 94 19
1 jjj 1 80 29
1 jjj 1 48 31
4 35 11

9 rows selected.


-- Left Table에서 Right Table로 1:1 대입후 (Right) Table의 Join되지 않는 값은 출력된다.

-- (+)기호를 사용한 Outer Join과 ANSI 표준인 Left/Right/Full Outer Join의 결과 값에서는
차이가 없지만 정렬이 다름을 알 수 있다.
정렬이 다르다는 것은 Join하는 순서/방식이 다르다는 뜻이다.

본 실험은 Oracle 9i에서 실험 되었습니다.


Powered by Tattertools