일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MSsql
- 신장사거리
- Lock
- 동적쿼리
- db
- 초대장
- 박근혜 탄핵
- 국정화
- 술안주
- 트래커
- 내장함수
- 토렌트
- 국정화 반대
- 파리바게트
- 카카오헤어샵
- Google Map
- 재테크
- javascript
- 최신트래커
- 카카오가 찾아준 헤어샵
- .net
- 하남
- 트레커
- C#
- 하남맛집
- 파리바게트 청라 SK점
- 함수
- jquery
- 티스토리
- 맛집
- Today
- Total
featur
[MSSQL] TALE JOIN ( 테이블 조인 ) 본문
[MSSQL] TALE JOIN ( 테이블 조인 )
SELECT문은 하나 이상의 테이블로부터 데이타를 가져올 수 있다. 복수의 테이블로부터 데이타를 가져오기 위해서는, FROM절 뒤에 복수의 테이블을 나열하면 된다. 이때, 테이블들이 서로 연관을 맺고 이들로부터 특정 조건의 레코드셋들을 선별하게 되는데, 이를 테이블 조인이라 한다.
테이블 조인에는 Cross Join, Inner Join, Outer Join 등이 있으며,
Cross Join은 테이블A의 모든 레코드들에 대해 테이블B의 모든 레코드가 맴핑되는 것으로, 테이블A에 10개 레코드가 있고, 테이블 B에 5개 있다면, 총 10 x 5 = 50개의 레코드를 출력한다.
Inner Join은 테이블A의 특정 컬럼값이 테이블B의 지정 컬럼값과 일치하는 레코드만을 선별하는 경우에 사용된다.
Outer Join은 Inner Join과 마찬가지로 조인 조건을 만족하는 레코드들을 출력하지만, 추가로 일치하지 않는 레코드들도 함께 출력해 준다.
INNER JOIN
Inner Join은 복수 테이블들이 조인 조건을 모두 만족하는 레코드들만 선별하는 조인이다.
Inner Join은 아래와 같이 INNER JOIN...ON 문장을 FROM절에 사용하거나 일반 WHERE절에서 조인 조건식을 사용할 수 있다.
아래의 예제는 Orders와 OrderDetails 두 테이블을 Order ID로 조인해서 그 값이 같은 경우만 선별하여 Orders 테이블의 일부 컬럼과 OrderDetails 테이블의 컬럼들을 출력하는 예이다.
-- Orders 테이블과 OrderDetails 테이블을 -- Order ID로 조인한 예 -- 두 테이블에 동일 컬럼이 있는 경우 -- 테이블명을 명시적으로 사용한다. SELECT Orders.ID, OrderDetails.* FROM Orders INNER JOIN OrderDetails ON Orders.ID = OrderDetails.ID WHERE Orders.OrderDate >= '1/1/2012' -- 테이블 Alias를 사용하여 -- 위의 문장을 간략히 다음처럼 표시 SELECT o.ID, d.* FROM Orders o INNER JOIN OrderDetails d ON o.ID = d.ID WHERE o.OrderDate >= '1/1/2012'
|
OUTER JOIN
도시별 매출을 구하는 쿼리를 생각해 보자.
만약 100개의 도시가 있고, 각 매출 데이타에는 어떤 도시에서 매출이 일어 났는지를 기록했다고 하자.
그런데, 모든 도시에서 매출이 일어났으면 상관 없겠지만, 만약 80개의 도시에서만 매출이 일어 났다고 하면,
Inner Join을 사용하면 매출이 없는 도시들은 매출 테이블에 해당 도시가 없을 것이므로 출력되지 않을 것이다.
하지만, 경우에 따라 모든 도시를 출력하고 매출이 없는 도시는 매출란을 공란 혹은 NULL로 표시하는 것이 필요할 때가 있다.
이렇게 복수 테이블에 모든 조인 조건이 만족되지 않더라도 한 테이블의 모든 데이타는 출력되게 하려면 Outer Join을 사용한다. 매칭 데이타가 없는 부분은 NULL로 표시될 것이다.
Outer Join은 모든 데이타를 출력하는 테이블의 위치에 따라 Left Outer Join, Right Outer Join, 그리도 양쪽 테이블의 모든 데이타가 기본적으로 출력되는 Full Outer Join이 있다.
-- City명은 매출여부와 상관없이 -- 출력. 매출없는 경우 합계란은 NULL -- SELECT c.Name, SUM(s.Total) '합계' FROM City c LEFT OUTER JOIN Sales s ON c.Code = s.CityCode GROUP BY c.Name -- Outer Join 결과 예 -- Name 합계 ------------------- ----------- 서울 264 부산 238 대전 232 제주 NULL
|
SELF JOIN
Self Join이란 FROM절에 하나의 테이블을 Table Alias를 통하여 두번 참조한 후,
자신의 테이블을 마치 다른 테이블인 것 처럼 조인하는 것이다.
아래 예제는 Self Join을 통해 Emp 테이블에서 Boss가 Kim인 모든 종업원을 출력하는 예이다.
SELECT e.EmpID, e.Name, b.Name AS Boss FROM Emp e, Emp b WHERE e.MgrId = b.EmpId AND b.Name = 'Kim' |
CROSS JOIN
Cross Join은 복수 테이블의 모든 레코드를 M x N 식으로 모두 출력하는 것으로,
만약 테이블A가 10개의 레코드가 있고, 테이블B가 5개의 레코드가 있다면, 10 x 5 레코드 즉 총 50개의 조합을 출력한다.
Cross Join은 특별한 조인 조건을 지정하지 않고, 복수 테이블명을 FROM절에 나열하면 된다.
SELECT * FROM Class, Scores
|
'개발 > MSSQL' 카테고리의 다른 글
[MSSQL] TOP(Transact-SQL) TOP(식,변수,퍼센트) (0) | 2016.12.20 |
---|---|
[MSSQL] MERGE를 사용하여 INSERT,UPDATE,DELETE 한번에 (0) | 2016.12.20 |
[MSSQL] SET TRANSACTION ISOLATION LEVEL(Transact-SQL) (0) | 2016.12.19 |
[MSSQL] TRY...CATCH(Transact-SQL) (0) | 2016.12.19 |
[MSSQL] IIF (SQL Server 2012 이상) (0) | 2016.12.19 |