이 내용은 2011년 6월 현재 SQL2011(코드명 Denali) Beta를 기준으로 작성 되었으며 SQL2011(코드명 Denali) 공식버전(RTM) 발표까지 꾸준히 업데이트 예정입니다.
아울러, 현재 Beta버전이지만 강좌를 따라해 보시는데 아무 문제 없으실거에요. 도움 되시길 바랍니다.
==================================================================================================



안녕하세요이스트럭(강동운입니다.

 

이번에는 DDL 에서 SELECT 절을 이용해 두개 이상의 테이블에서 데이터를 가져올 경우JOIN  활용해서 가지고   있습니다여기서 JOIN 방식들은 어떤 것이 있는지에 대해서 설명을 드리겠습니다.

 

JOIN 이란? A 테이블과 B 테이블의 결합!

   이상의 테이블에 있는 데이터를 가지고 오는 수단이라고 보시면 되겠습니다.

 

JOIN 해서 얻을  있는 집합은 크게 3가지로 구성되어있으며, OUTER JOIN 3가지로 나뉩니다.

 

1.    CROSS JOIN

2.    INNER JOIN

3.    OUTER JOIN(LEFT, RIGHT, FULL OUTER)

 

예제를 위해 테이블을 만들어보도록 하겠습니다.

 

 

 

USE tempdb

GO

IF OBJECT_ID('JoinA','U') IS NOT NULL

           DROP TABLE JoinA

GO

IF OBJECT_ID('JoinB','U') IS NOT NULL

           DROP TABLE JoinB

GO

 

CREATE TABLE JoinA(idx INT NOT NULL)

GO

CREATE TABLE JoinB(idx INT NOT NULL)

GO

INSERT INTO JoinA VALUES(1),(2),(3)

INSERT INTO JoinB VALUES(1),(5)

GO

 

 

 

JoinA 테이블에는 1,2,3 row를 가지고 있고

JoinB 테이블에는 1,5 row를 가지고 있습니다.

 

첫 번째, CROSS JOIN

CROSS JOIN은 테이블에 n개가 있고, B 테이블에 m개가 있으면얻을 수 있는 row.. m*n개에 해당이 됩니다 A테이블에 있는 모든 원소와 B테이블에 있는 모든 원소가 결합되는 테이블을 말합니다.

 

예제를 살펴보도록 하겠습니다.

 

--//ANSI SQL-92 문법

SELECT

                  A.IDX AS AIDX

,                 B.IDX AS BIDX

FROM      JoinA AS A --// AS A  JoinA 라는 테이블의 별칭입니다.

CROSS JOIN JoinB                  AS B --// AS B  JoinB 라는 테이블의 별칭입니다.

 

1.png

 

A에 있는 1,2,3 B에 있는 1,5와 모두 결합이 되어 나타나게 됩니다.

 

이게 바로 CROSS JOIN 이며보통 원본 테이블을 두번이상 읽어야 하는 경우에 한번만 읽어서 뻥튀가 하는데 주로 이용합니다.

 

나중에 접하시겠지만 => 행으로 바꿀 때 많이 사용하는 방법 중 하나 입니다.

 

 

 

--//ANSI SQL-89 문법

SELECT

                  A.IDX AS AIDX

,                 B.IDX AS BIDX

FROM JoinA AS A , JoinB  AS B

 

 

ANSI SQL-92 문법에 비해 오래된 ANSI SQL-89 문법은 중간에 CROSS JOIN이란 단어가 없이 컴마로 구분됩니다. SQL Server Denali에서는 ANSI SQL-92 89 문법을 모두 제공하지만되도록이면 최신에 계정된 ANSI SQL-92 문법을 사용하는 것이 좋습니다오래된 방식이다 보니 차기버전 혹은 그 후 버전에서는 사용하지 못할 수도 있기 때문입니다.

 

두 번째, INNER JOIN(내부 조인).

 

INNER JOIN.. A 테이블과 B 테이블간의 교집합을 의미합니다.

 

4.png

 

예제를 바로 보도록 하겠습니다.

 

 

--//ANSI SQL-92

SELECT

                  A.IDX AS AIDX

,                 B.IDX AS BIDX

FROM                       JoinA       AS A

INNER JOIN  JoinB               AS B ON A.idx = B.IDX

 

 

2.png

 

CROSS JOIN는 두개의 테이블의 행이 조인이 되기 때문에 따로 조인 조건이 필요하지 않지만, INNER JOIN은 서로 공통이 되는 키 값을 가지고 올 수 있도록 하기 위해 ON 절 뒤에..연결고리가 될 수 있는 Key를 지정해야 하는 것이 특징입니다.

 

또한 중간에 INNER 라는 단어를 넣지 않아도 DEFAULT 값이기 때문에 똑같이 작동합니다.

 

--//ANSI SQL-92

SELECT

                  A.IDX AS AIDX

,                 B.IDX AS BIDX

FROM                       JoinA       AS A

 JOIN  JoinB          AS B ON A.idx = B.IDX

 

 

 

INNER JOIN ANSI SQL-89버전은 아래와 같습니다.

 

--//ANSI SQL-89

SELECT

                  A.IDX AS AIDX

,                 B.IDX AS BIDX

FROM  JoinA         AS A, JoinB AS B

WHERE A.IDX = B.IDX

 

 

 

 

또한 꼭 조건이 = 이 아니라도 가능합니다!

 

 

--//ANSI SQL-92

SELECT

                  A.IDX AS AIDX

,                 B.IDX AS BIDX

FROM  JoinA         AS A

INNER JOIN JoinB AS B ON A.IDX < B.IDX

 

3.png

 

 

 

세 번째, OUTER JOIN(외부 조인)

 

OUTER JOIN 의 종류는 3가지(LEFT, RIGHT, FULL)가 있습니다.

 

1.    LEFT OUTER JOIN

5.png

 

LEFT OUTER JOIN 예제를 살펴보도록 하겠습니다.

 

 

--//ANSI SQL-92

SELECT

                  A.IDX AS AIDX

,                 B.IDX AS BIDX

FROM            JoinA      AS A

LEFT OUTER JOIN JoinB AS B ON A.IDX = B.IDX

 

5_1.png

 

 

집합에 해당하는 TableA에 있는 1,2,3과 대칭이 되는 JoinB와 매칭되어 나오게 됩니다.

 

매칭이 되지 않은 값(없는 값)에 대해서는 NULL의 데이터를 가지고 나오게 됩니다.

 

위의 예제에서는.. JoinB에는.. IDX 값이 2, 3이 없기 때문에 NULL을 반환하게 됩니다.

 

2.    RIGHT OUTER JOIN

6.png

 

RIGHT OUTER JOIN .. 단지 기준이 되는 테이블의 위치가 변경 된 것을 말합니다.

 

예제를 살펴보도록 하겠습니다.

 

 

 

--//ANSI SQL-92

SELECT

                  A.IDX AS AIDX

,                 B.IDX AS BIDX

FROM             JoinA  AS A

RIGHT OUTER JOIN JoinB  AS B ON A.IDX = B.IDX

 

6_1.png

 

 

이제 좀 이해가 가시나요위의 결과는 아래와도 같겠죠~!

 

 

 

--//ANSI SQL-92

SELECT

                  A.IDX AS AIDX

,                 B.IDX AS BIDX

FROM            JoinB  AS B

LEFT OUTER JOIN JoinA  AS A ON A.IDX = B.IDX

 

 

 

 

3.    FULL OUTER JOIN

7.png

FULL OUTER JOIN은 두 개의 테이블에 조합이 가능한 모든 키를 매칭해서 보여줍니다.

 

예제를 살펴보도록 하겠습니다.

 

 

 

--//ANSI SQL-92

SELECT

                  A.IDX AS AIDX

,                 B.IDX AS BIDX

FROM             JoinA  AS A

RIGHT OUTER JOIN JoinB  AS B ON A.IDX = B.IDX

 

 

7_1.png

 

JoinA 테이블과 JoinB 테이블간의 조인 key 가 되는 IDX가 조합이 가능한 모든 조합이 추출이 됩니다.

 

각 키값에 매칭이 되지 않는 데이터는 NULL을 반환하게 됩니다.

 

 

이로서 간단한 조인에 방식에 대해서 살펴봤습니다.

감사합니다.

 
[출처] SQLER.COM http://www.sqler.com/390108 


SQL2011(코드명 Denali) 시리즈 강좌 리스트
[SQL2011강좌] 1. 코드명 Denali 설치 방법
[SQL2011강좌] 2. SSMS 접속 및 간단한 쿼리 실행
[SQL2011강좌] 3. SQL Server 의 MDF, LDF 그리고 데이터베이스 생성하기
[SQL2011강좌] 4. DDL 1탄: 테이블 생성
[SQL2011강좌] 5. DDL 2탄: 쿼리를 이용한 테이블 컬럼 추가 및 삭제
[SQL2011강좌] 6. Primary key와 Unique 제약조건
[SQL2011강좌] 7. DML 1탄 INSERT
[SQL2011강좌] 8. DML 1탄 INSERT(identity 속성)
[SQL2011강좌] 9. Sequence
[SQL2011강좌] 10. pubs, northwind Database 예제 설치
[SQL2011강좌] 11. SELECT(단일 테이블)
[SQL2011강좌] 12. SELECT(JOIN)
[SQL2011강좌] 13. UPDATE, DELETE 절
[SQL2011강좌] 14. DISTINCT, UNION, UNION ALL 키워드
[SQL2011강좌] 15. ORDER BY, GROUP BY, HAVING
[SQL2011강좌] 16. SubQuery(서브쿼리)
[SQL2011강좌] 17. 뷰에 대한 이해 및 생성, 수정, 삭제
[SQL2011강좌] 18. 저장 프로시저에 대한 이해, 생성, 수정, 삭제
[SQL2011강좌] 19. 인덱스에 대한 이해
[SQL2011강좌] 20. 클러스터드 인덱스와 넌 클러스터드 인덱스
[SQL2011강좌] 21. 트랜잭션에 대한이해
[SQL2011강좌] 22. 트랜잭션의 격리수준 4가지
[SQL2011강좌] 23. 잠금에 대한 이해
[SQL2011강좌] 24. 백업과 복구에 대한 이해(풀백업, 차등백업, 트랜잭션 로그 백업)
[SQL2011강좌] 25. 백업과 복구 전략
[SQL2011강좌] 26. 커서란?



SQL2011(코드명 Denali) 시리즈 동영상 강좌 리스트
[SQL2011 동영상 강좌] 1. 코드명 Denali 설치 방법
[SQL2011 동영상 강좌] 2. SSMS 접속 및 간단한 쿼리 실행
[SQL2011 동영상 강좌] 3. SQL Server 의 MDF, LDF 그리고 데이터베이스 생성하기
[SQL2011 동영상 강좌] 4. DDL 1탄: 테이블 생성
[SQL2011 동영상 강좌] 5. DDL 2탄: 쿼리를 이용한 테이블 컬럼 추가 및 삭제
[SQL2011 동영상 강좌] 6. Primary key와 Unique 제약조건
[SQL2011 동영상 강좌] 7. DML 1탄 INSERT
[SQL2011 동영상 강좌] 8. DML 1탄 INSERT(identity 속성)
[SQL2011 동영상 강좌] 9. Sequence
[SQL2011 동영상 강좌] 10. pubs, northwind Database 예제 설치
[SQL2011 동영상 강좌] 11. SELECT(단일 테이블)
[SQL2011 동영상 강좌] 12. SELECT(JOIN)
[SQL2011 동영상 강좌] 13. UPDATE, DELETE 절
[SQL2011 동영상 강좌] 14. DISTINCT, UNION, UNION ALL 키워드
[SQL2011 동영상 강좌] 15. ORDER BY, GROUP BY, HAVING
[SQL2011 동영상 강좌] 16. SubQuery(서브쿼리)
[SQL2011 동영상 강좌] 17. 뷰에 대한 이해 및 생성, 수정, 삭제
[SQL2011 동영상 강좌] 18. 저장 프로시저에 대한 이해, 생성, 수정, 삭제
[SQL2011 동영상 강좌] 19. 인덱스에 대한 이해
[SQL2011 동영상 강좌] 20. 클러스터드 인덱스와 넌 클러스터드 인덱스
[SQL2011 동영상 강좌] 21. 트랜잭션에 대한이해
[SQL2011 동영상 강좌] 22. 트랜잭션의 격리수준 4가지
[SQL2011 동영상 강좌] 23. 잠금에 대한 이해
[SQL2011 동영상 강좌] 24. 백업과 복구에 대한 이해(풀백업, 차등백업, 트랜잭션 로그 백업)
[SQL2011 동영상 강좌] 25. 백업과 복구 전략
[SQL2011 동영상 강좌] 26. 커서란?