database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 27492 게시물 읽기
No. 27492
outer join
작성자
김성진
작성일
2006-08-04 11:33
조회수
3,183

A테이블(과목테이블)

code name

1 영어

2 수학

3 과학

 

B테이블(성적테이블)

name point code

홍길동 10 1

개똥이 20 2

개똥이 30 3

말똥이 10 3

.

.

.

 

 

 

원하는값

과목 이름 점수

영어 홍길동 10

수학 홍길동 0

과학 홍길동 0

영어 개똥이 0

수학 개똥이 20

과학 개똥이 30

.

.

.

이런식으로 학생당 과목이랑 조인해서 해당 과목이 없더라도 0점으로 찍어주고싶습니다.

 

select

A.name,

B.name

nvl(B.point, 0) point

from A, B

where A.code = B.codee(+)

 

이런식으로 아웃터 조인했는데 결과값이 안나오네요

이글을 읽어주셔서 감사합니다.

 

 

이 글에 대한 댓글이 총 3건 있습니다.

select a.name, b_name, nvl(b.point, 0) point

From (

   select *

   from a, (Select name b_name From b group by name) b1

) a

Left Outer Join b b on a.code = b.code and a.b_name=b.name

order by b_name

 

푸몬(FoodMonster)님이 2006-08-04 17:24에 작성한 댓글입니다.

아웃터조인에 대해 조금 잘못알고 계신듯하여 답글을 답니다.

 

아웃터 조인이란 두테이블 조인시 조인키가되는 값이 어느 한쪽에 없을 경우, 없는 쪽 테이블의 로우가 누락되는 것을 방지할 때 사용하는 방법입니다.

 

현재 질문하신 테이블 a,b의 조인키는 code입니다.

그런데 b테이블을 보면 분명 code값이 1,2,3 모두 존재하고 있습니다. 이럴 경우 아웃터 조인이 안됩니다.

만일 두 테이블의 조인키가 name,code였다면 님이 원하시는 결과가 나왔겠지요. 그러나 두 테이블의 조인키는 code이며 a테이블에 있는 모든 code값이 b테이블에 존재하기 때문에 님이 원하는 대로 아웃터 조인이 작동하지 않는 것입니다.

 

만일 b테이블에서 홍길동만 남긴채로 아웃터 조인을 한다면 홍길동에 대해 영어,수학,과학이 모두 출력될 것입니다.왜냐하면 b테이블에는 code가 1밖에 없기 때문에 code 2,3이 아웃조인에 의해 출력되는 것입니다.

 

따라서 원하는 방식대로 출력하기 위해서는 두 테이블을 code만이 아닌 name과 code의 아웃조인방식으로 변경해야 합니다. 위에 푸몬님께서 답변하신 방식대로 카티젼 곱 형식으로 테이블 a,b의 모든 경우의 수를 구하시면 됩니다.

 

==========================================

tab42:과목테이블

tab43:성적테이블

 

SELECT C.NAME,C.KNAME,D.POINT
FROM
(
 /*a,b의 모든 경우의 수를 카티젼곱으로 구한다*/
 SELECT A.CODE,A.NAME,B.NAME KNAME
 FROM TAB42 A,
 (SELECT DISTINCT NAME FROM TAB43) B
)C,TAB43 D
/*name,code 두 칼럼의 아웃조인으로 변경한다*/
WHERE C.CODE=D.CODE(+)
AND C.KNAME=D.NAME(+)

김강환(hashtable)님이 2006-08-07 09:51에 작성한 댓글입니다.

그렇군요. 카티션 곱에 대해 확실히 알게 되었습니다. 감사합니다....

임형구님이 2007-01-16 15:47에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
27495undo recovery 문제 해결 요청!!!ㅡ,.ㅜ [1]
강민정
2006-08-04
1246
27494오라클의 버그인지...?? [1]
lenzing
2006-08-04
1029
27493DML 에라발생 [1]
유춘기
2006-08-04
710
27492outer join [3]
김성진
2006-08-04
3183
27491아카이브 파일 생성시 TRC 파일도 생겨요. ㅡㅡ [1]
질문이용
2006-08-04
905
27489Real Application Cluster DB연결방법
이수연
2006-08-03
729
27488insert관련 질문입니다. [2]
초보디비
2006-08-03
1462
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다