본문 바로가기
프로그래밍/DB & Redis

[mssql] JOIN 쿼리 - Cross, Inner, left outer, right outer, full outer

by 뽀도 2016. 7. 20.

---------------------------------------------------------------------------------------------------------------

참고 :

 http://www.sqler.com/index.php?_filter=search&mid=bSQL2011&search_target=title&search_keyword=join&document_srl=390108 

 

http://kokun.tistory.com/entry/MSSQL-CROSS-JOIN-%EC%83%81%ED%98%B8-%EC%A1%B0%EC%9D%B8

 

http://kanetami.tistory.com/entry/mssql-%EC%A1%B0%EC%9D%B8%EC%9D%98-%EC%A2%85%EB%A5%98-inner-joinleftright-outer-join-cross-join

---------------------------------------------------------------------------------------------------------------

 

* Join은 두개 이상의 테이블에서 원하는 정보를 얻을때 사용하는 방법입니다.

 

 

* Table 설명

 - Employee : 사원 정보를 저장하는 테이블

 - RankInfo : 사원의 직급 정보를 저장하는 테이블

 

1. CROSS JOIN 쿼리

---------------------------------------------------------------------------------------------------------------

select * from Employee CROSS JOIN RankInfo;

---------------------------------------------------------------------------------------------------------------

 

- Employee 테이블의 모든 값과 RankInfo 테이블의 모든 값이 합쳐져 보여주는 쿼리 입니다.

- CROSS JOIN에서는 ON 구문을 사용하라 수 없습니다. 용도는 테스트로 사용할 많은 용량의 데이터를 생성할 때 주로 사용합니다.

- 데이터의 개수는 테이블1의 열수 X 테이블2의 열수 입니다.

 

 

2. INNER JOIN 쿼리

---------------------------------------------------------------------------------------------------------------

select * from Employee A INNER JOIN RankInfo B on A.[Rank] = B.No;

---------------------------------------------------------------------------------------------------------------

 

-  Employee Table과 RankInfo Table의 서로 교집합 부분을 보여줍니다.

 

 

3. LEFT OUTER JOIN

 

쿼리 1 : Employee 기준

---------------------------------------------------------------------------------------------------------------

select * from Employee E Left outer join RankInfo R on E.[Rank] = R.No;

---------------------------------------------------------------------------------------------------------------

 

 

- Employee 테이블의 Rank값 기준으로 Rank 테이블의 Rank를 매칭 시켜서 조회

- Left 키워드는 왼쪽에 오는 테이블을 기준으로 삼는다는 의미.

 

쿼리 2 : RankInfo 기준

---------------------------------------------------------------------------------------------------------------

select * from RankInfo R Left outer join Employee E on E.[Rank] = R.No;

---------------------------------------------------------------------------------------------------------------

 

- RankInfo 테이블을 기준으로 Rank값을 찾았는데, Employee인포엔 Rank값이 2인 주임이 없어서 null 값 발생.

 

 

4. RIGHT OUTER JOIN

 

쿼리 1 : RankInfo 기준

---------------------------------------------------------------------------------------------------------------

select * from Employee E Right outer join RankInfo R on E.[Rank] = R.No;

---------------------------------------------------------------------------------------------------------------

 

 

- Right outer join은 오른쪽에 있는 table 기준으로 join한다.

- 그래서 RankInfo에는 있는 no - 2, name - 주임이 Employee에는 없어서 null을 보여준다.

 

쿼리 2 : Employee 기준

---------------------------------------------------------------------------------------------------------------

select * from RankInfo R Right outer join Employee E on E.[Rank] = R.No;

---------------------------------------------------------------------------------------------------------------

 

 

 

 

5. FULL OUTER JOIN

 

- 조합이 가능한 모든 키를 매칭해서 보여줍니다.

- 매칭이 되지 않는 값은 null을 보여 줍니다.

- left, right outer join을 실행한후 중복되는 값(inner join)을 제거한 값을 표시합니다.

 

---------------------------------------------------------------------------------------------------------------

select * from Employee E Full outer join RankInfo R on E.[Rank] = R.No;

---------------------------------------------------------------------------------------------------------------

 

---------------------------------------------------------------------------------------------------------------

select * from RankInfo R Full outer join Employee E on E.[Rank] = R.No;

---------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

반응형

'프로그래밍 > DB & Redis' 카테고리의 다른 글

시퀀스  (0) 2016.07.20
[MSSQL] isNull 함수  (0) 2016.07.20
[sql] sql error 26번 에러  (0) 2015.10.25
[DB] CHAR와 VARCHAR 비교  (0) 2015.08.31
저장 프로시저 or 스토어드 프로시저  (0) 2015.08.25

댓글