안규 공부방

MS-SQL > OUTER JOIN

등록일 : 2017-07-03 19:00 조회수 : 92,975

안녕하세요!

오랜만이죠???? 오늘은 아웃터 조인(outer join)에 대해서 잠깐 이야기를 해야 할 것 같습니다.....

inner join 이 두 테이블에 있는 키 값이 일치하는 데이터만 가져오지요?

그런데 문제는 양 테이블 중에서 어느 한쪽을 중심으로 해서 다른쪽 테이블의 값을 가지고 오고 싶다면 어케

해야 할까요? (이해하기 어렵다구요?) 쉽게 설명드리면 어느 한쪽이 중심이 되구 다른쪽은 조건이 맞는값이

따라온다는 말입니다. 이럴 때 사용되는 쿼리가 바로 outer join 이랍니다.

아래와 같은 테이블이 있다고 가장해 봅니다.

mem 테이블에서는 레코드가 1,2,3 세 개만 존재하는데 반해서,,, info는 1,2 두 개가 존재하지요?

아래와 같은 테이블에서는 mem 테이블이 회원의 정보를 가지는 중요한 자료이기 때문에(이름,id,passwd) 이기 때문에

mem 테이블을 중심으로 레코드를 가지고 와야 되겠지요?

이와 같이 한쪽 테이블을 모두 가지고 오고 나머지 테이블은 조건에 맞는 값을 취하는 방법이 outer join 이랍니다.
 

mem 테이블

NO

NAME

ID

PASSWD

1

최안규

cak0289

4109

2

홍길동

hgd8989

89234

3

김길동

hgd8989

89234

 

info 테이블

NO

TEL

ADDR

Email

1

011-9619-8280

역삼동

cak0280@shinbiro.com

2

011-644-4499

신길동

hgd8989@hanmail.com


위와 같이 내용이 존재한다고 가정했을 때 어떤식으로 쿼리를 사용해야 할까요?

아래와 같이 값을 가지고 오고 싶다면요?
 

NO

NAME

ID

PASSWD

addr

tel

1

최안규

cak0289

4109

역삼동

011-9619-8280

2

홍길동

hgd8989

89234

신길동

011-644-4499

3

김길동

hgd8989

89234


select mem.no,mem.name,mem.id,mem.passwd, info.tel, info.addr from mem,info where mem.no=info.no
위와 같이 기본적인 조인을 사용했을 경우(inner join) mem.no 와 info.no 가 같은 값만을 가지고 오기 때문에
 

NO

NAME

ID

PASSWD

addr

tel

1

최안규

cak0289

4109

역삼동

011-9619-8280

2

홍길동

hgd8989

89234

신길동

011-644-4499


이런식으로 값이 두 개밖에 가지고 오지 않습니다.

이럴 때 outer join을 사용할 수 있는데요...
select mem.no,mem.name,mem.id,mem.passwd, info.tel, info.addr from mem left outer join info on mem.no=info.no

이렇게 해 주면 되는데요.... 여기에서 left를 쓰면 왼쪽에 있는 테이블(mem)을 기준으로 조인을 하고 right를 쓰면

오른쪽 테이블(info)을 기준으로 조인을 한다는 뜻이랍니다. 만약 모든 컬럼을 다 가져오고 싶다면?

full outer join을 사용하면 된답니다. 어때요? 쉽지요?

이걸 만약 T-SQL 문법으로 사용한다면 더 간단하게 작성할 수 있답니다.

left outer join
select mem.no,mem.name,mem.id,mem.passwd, info.tel, info.addr from mem,info where mem.no*=info.no


right outer join
select mem.no,mem.name,mem.id,mem.passwd, info.tel, info.addr from mem,info where mem.no=*info.no

T-SQL 문법에서 는 full outer join은 사용되지 않는답니다.

어때요????

오늘 공부한 outer join도 어렵지 않으시지요???? 근데,, 저에겐 왜 이렇게 어렵게만 느껴지는지 모르겠네요.. 호호호

그럼, 프로젝하시면서 유용하게 사용하시길 바랍니다... 이정도 쿼리를 쉽게 구현하고 응용을 하신다면,,,

아마 그대는 고수의 반열에 한발짝 다가서는 겁니다.

감사합니다.
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.