안규 공부방

MS-SQL > INNER JOIN

등록일 : 2017-06-30 17:54 조회수 : 102,365

안녕하세요! 

오늘은 조인(join)에 대해서 잠깐 이야기를 해야 할 것 같습니다/
보통 정규화를 거친 테이블들은 컬럼들이 여러개의 테이블로 나누어져 있는 경우가 대부분입니다. 
우리는 같은 특성을 가진 테이블을 가공을 해서 출력을 시켜야 할 때가 종종 있습니다.
뭐, 하나의 테이블을 사용한다면 문제가 없겠지만,,,, 여러개로 나누어져 있는 경우에는 JOIN 이란 쿼리를 모를땐 여러번 쿼리를 반복
적으로 사용할수밖에 없을겁니다.

여기서 우리는 테스트할 테이블을 하나 만들어 보고 같이 이야기를 나누어 보고자 합니다. 
아래와 같은 테이블이 있다고 가장해 봅니다. 

 

mem 테이블

NO

NAME

ID

PASSWD

1

최안규

cak0289

4109

2

홍길동

hgd8989

89234

 info 테이블

NO

TEL

ADDR

Email

1

011-9619-8280

역삼동

cak0280@shinbiro.com

2

011-644-4499

신길동

hgd8989@hanmail.com


위와 같이 member 테이블(mem)과 그와 연관이 되는 info 란 테이블이 있다고 가정했을 때,,, 여기에서 우리는 회원번호, 이름,아이디, 전화, 이메일이란 테이블에서 정보를 뽑아오고 싶다면 어떻게 해야 할까요?

이럴 때 유용하게 사용하는 되는 쿼리가 바로 JOIN 이랍니다. 
아래처럼 사용하면 되죠...

Select mem.no , mem.name , mem.id , info.tel , info.Email from mem, info where mem.no=info.no

위와 같이 쿼리를 사용해서 처리를 해 줄 수 있습니다. 
즉 mem 테이블의 no와 info 테이블의 no는 같은 정보를 가지고 있는 인덱스 값입니다.... 
이 두 값이 일치하는 값들을 모두 추출하고, 출력하고 싶은 필드의 이름을 적어 주시면 된답니다. 
from 다음의 테이블의 이름은 mem,info 와 같이 컴마를 구분으로 적어 주시면 된답니다. 


그럼, 이번에는 다음과 같은 테이블이 있다고 가정을 해 봅니다.

테이블명 : A
 

no

idx

member_no

1

1

1

2

2

1

3

3

1

4

1

2

5

2

2

테이블명: B

no

title

1

클럽이름1

2

클럽이름2

3

클럽이름3

 
다음과 같은 정보를 가지고 있는 테이블이 있습니다..... 

먼저 테이블을 보면 A 테이블의 no는 일련번호이며, idx는 B테이블의 no값의 인덱스랍니다. 그리구, member_no는 각기 회원의 번호이지요.... 보통 저같은 경우는 클럽기능을 만들 때 주로 사용했던 로직인데요...

위의 테이블에서는 1번 회원이 등록한 클럽이 3개가 있답니다. idx 값은 이 클럽의 번호들이 되겠네요.. 그쵸?
그렇다면,,, 내가 로그인을 했을 때,,,  이 회원번호만을 가지고 있습니다. 이때,,, 조인을 사용해서 회원 1번이 가입한 클럽의 이름을 출력하고 싶습니다. 어떻게 하면 될까요..... 

A테이블의 member_no 값을 가지고 b테이블의 title을 출력하고 싶은 겁니다..
이때도 마찬가지고 쿼리를 사용하면 된답니다...... 조건만 하나를 더 붙이면 되겠네요...
아래처럼요..

select A.idx , B.title from A,B where (A.idx=B.no) and (member_no=1)

A테이블의 idx와 B테이블의 NO가 같은 값만을 출력합니다... 단 member_no 필드의 값이 1인 것중에서요...
만약 여기에서 and (member_no=1) 이 명령을 빼놓고 쿼리를 한다면,,,, A테이블의 모든 결과가 화면에 출력이 되겠죠?
그래도 간단히 집고 넘어가야 할 것 같아서 짬을 내서 적어 보았습니다.

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