아우터 조인 거듭 질문드립니다. 0 4 2,281

by 물개 [Oracle 기초] [2012.06.26 11:05:01]


[상황] 10건은 50건에 다 있는 값이고 50건은 또 100건에 다 포함되어 있는 값이라 가정한 상황입니다.


SELECT * FROM
(테이블 1 건수 100건 ) A1,
(테이블 2 건수 50건 ) B1,
(테이블 3 건수 10건 ) C1
WHERE A1.COLUME1 = B1.COLUME1

이렇게 조회 했을 때 왜 결과값이 
이상하게 나오는 것인가요?

[질문1] C1을 언급하지 않으면 안되는 것인가요?
-------------------------------------------------------------
SELECT * FROM
(테이블 1 건수 100건 ) A1,
(테이블 2 건수 50건 ) B1,
(테이블 3 건수 10건 ) C1
WHERE A1.COLUME1 = B1.COLUME1
    AND  A1.COLUME1 = C1.COLUME1

[질문2] 이렇게 조회 한다고 하면 결과 값이 위 상황에 맞다면 10개가 나오나요?

-------------------------------------------------------
SELECT * FROM
(테이블 1 건수 100건 ) A1,
(테이블 2 건수 50건 ) B1,
(테이블 3 건수 10건 ) C1
WHERE A1.COLUME1 = B1.COLUME1
AND  B1.COLUME1 = C1.COLUME1

[질문3] 이렇게 조회 한다고 하면 결과 값이 위 상황에 맞다면 10개가 나오나요?
-------------------------------------------------------
SELECT * FROM
(테이블 1 건수 100건 ) A1,
(테이블 2 건수 50건 ) B1,
(테이블 3 건수 10건 ) C1
WHERE A1.COLUME1 = B1.COLUME1
AND  B1.COLUME1 = C1.COLUME1
    AND  C1.COLUME1 = A1.COLUME1
[질문4] 이렇게 조회 한다고 하면 결과 값이 위 상황에 맞다면 10개가 나오나요?

교집합 형태가 이해되긴 하는데요... 
아직 몇몇 부분이 잘 이해가 안되어서 이렇게 질문 드립니다...고맙습니다...
by 마농 [2012.06.26 11:33:40]

단순 건수만 가지고 논할 수 없습니다.
여러가지 상황에 따라 결과는 달라집니다.
○ 테이블간의 관계
  - 상속관계, 대칭관계, 종속관계 등등 ?
  - 1:1, 1:m, m:n ?
  - 조인에 전체 참여하는지 일부만 참여하는지?
○ 키가 유일키인지 중복가능키인지?


by 마농 [2012.06.26 11:38:06]

음.. 맨 첫줄 상황에 대한 가정이 있었네요...
그렇다면...
1. 50 * 10 = 500건
2. 10건
3. 10건
4. 10건


by 물개 [2012.06.26 13:32:58]
출력대상이 *라서 모든 결과값이
A1 x B1 x C1인데
조건에 의해 B1 x C1이 되어서 50 x 10 = 500이란게 나온것이군요? 오홀~

2번 3번 4번은 [상황] 때문에 결국 같은 결과가..나온것이군요

테이블간의 관계나, 유일키 중복가능키여부에 따라 바뀌는 부분을 좀 더 알아 봐야겠습니다. ㅠ.ㅜ

감사합니다..

by 부쉬맨 [2012.06.26 13:58:23]
테스트유형은이런식으로

 CREATE TABLE T1 AS
SELECT level A FROM DUAL CONNECT BY LEVEL < 100
CREATE TABLE T2 AS
SELECT level A FROM DUAL CONNECT BY LEVEL < 50
CREATE TABLE T3 AS
SELECT level A FROM DUAL CONNECT BY LEVEL < 10
COMMIT;
SELECT COUNT(*) 
FROM 
( SELECT * FROM T1 )A, 
( SELECT * FROM T2 )B,
( SELECT * FROM T3 )C
WHERE A.A = B.A
  --AND a.A = C.A
  --AND C.A = A.A
  
SELECT COUNT(*) 
FROM 
( SELECT * FROM T1 )A, 
( SELECT * FROM T2 )B,
( SELECT * FROM T3 )C
WHERE C.A = A.A
  AND C.A = B.A
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입