BLOG main image
전체 (276)
[Computer] (42)
[Programming] (62)
[DBMS] (26)
[Operating System] (21)
[Study English] (8)
[For money] (28)
[Interest] (89)
«   2009/11   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
77883 Visitors up to today!
Today 75 hit, Yesterday 46 hit
'조인'에 해당되는 글 2건
[폭주기관차, 2007/04/18 09:40, [DBMS]/Oracle]
SELECT *
  FROM A
     , B
 WHERE A.USR = B.USR(+);


<결과>
USR         ID          USR         TMP        
----------- ----------- ----------- -----------
          2          48           2          62
          3           4           3          75
          3           4           3          13
         13          55                        
         22          67                        

5 rows selected.


즉, 좌측은 USR, ID 컬럼은 A Table, 우측 USR, TMP는 B Table을 의미

[가정]
A.USR와 B.USR는 조인조건
B의 TMP가 62인 값이 데이터를 삭제 하려고 할 경우

DELETE FROM B
 WHERE TMP = 62;

명령을 수행하면 B테이블의 값은 지워지지만 A테이블의 값은 지울 수가 없다.
그럴 경우 ROWID IN이란 명령을 사용하면 된다.

B테이블에 지워야할 조건을 가지고 있으므로 먼저 지워서는 안된다.

DELETE FROM A
 WHERE ROWID IN (
                  SELECT A.ROWID
                    FROM A
                       , B
                   WHERE A.USR = B.USR
                     AND B.TMP = 62
                 );

DELETE FROM B
 WHERE TMP = 62;

<결과>
1 rows Deleted
1 rows Deleted


그렇다면 ROWID IN 안의 결과 값이 궁금할 것이다.
(아래 결과는 데이터 삭제 전에 나온 값입니다.)

SELECT A.ROWID
  FROM A
     , B
 WHERE A.USR = B.USR
   AND B.TMP = 62;


<결과>
ROWID              
-------------------
AAAHI8AAGAAIHQWAAD

1 rows selected.

음.. 무슨 뜻일까...? ㅋ
(아래 결과는 데이터 삭제 전에 나온 값입니다.)

SELECT ROWID FROM A;

<결과>
ROWID              
-------------------
AAAHI8AAGAAIHQWAAA
AAAHI8AAGAAIHQWAAB
AAAHI8AAGAAIHQWAAC
AAAHI8AAGAAIHQWAAD

4 rows selected.

Oracle에서는 테이블의 각 행에 ROWID란 고유 번호를 가지고 있는 것 같다.^^
3개 이상 테이블 삭제시는 삭제할 ROWID를 따로 임시 테이블을 만들어서
삭제하면 편리할 듯 하다^^

본 실험은 Oracle 9i에서 하였습니다.
Trackback Address :: http://kongmks.cafe24.com/trackback/195
Name
Password
Homepage
Secret
[폭주기관차, 2007/02/27 13:25, [DBMS]/Oracle]
사용자 삽입 이미지

이런 테이블이 있다고 치면...



<Right Outer Join>
SELECT * FROM A RIGHT OUTER JOIN B
ON
    A.TUID = B.TUID;


사용자 삽입 이미지

Right Outer Join



Right Outer Join은 Left에서 Right로 맨 밑의 행에서부터 대입된다.

A Row 1(1, kkk) ----> B Row 5(1, 94, 19) 대입
A Row 1(1, kkk) ----> B Row 4(1, 80, 29) 대입
A Row 1(1, kkk) ----> B Row 1(1, 48, 31) 대입

A Row 1의 tUid랑 b의 tUid랑 같은 값이 이제 없으므로 다음 Row로 간다.

A Row 2(2, bbb) ----> B Row 3(2, 75, 23) 대입
A Row 2(2, bbb) ----> B Row 2(2, 88, 27) 대입
        < 중략 >

마지막으로 B Row 6(4, 35, 11)은 일치하는 값이 없지만 출력한다.


TUID        NAME 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.

이 결과 값은 Oracle 9i에서 수행된 값입니다.


<Left Outer Join>
SELECT * FROM A Left Outer Join B
ON
    A.TUID = B.TUID;


사용자 삽입 이미지

Left Outer Join



Left Outer Join이므로 Right에서 Left로 대입된다.

B Row 1(1, 48, 31) --> A Row 4(1, jjj) 대입
B Row 1(1, 48, 31) --> A Row 1(1, kkk) 대입
B Row 2(2, 88, 27) --> A Row 2(2, bbb) 대입
B Row 3(2, 75, 23) --> A Row 2(2, bbb) 대입
B Row 4(1, 80, 29) --> A Row 4(i, jjj) 대입
        < 중략 >
마지막 A Row 3(3, ccc)은 일치하는 것이 없으므로 출력


TUID        NAME 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.

이 결과 값은 Oracle 9i에서 수행된 값입니다.
Trackback Address :: http://kongmks.cafe24.com/trackback/150
Name
Password
Homepage
Secret
*1