loading

프로그래밍/MS-SQL

SQL문 실습 - OUTER JOIN

침착곰 2016. 7. 24. 17:02
반응형

- SQL문 실습 - OUTER JOIN -


지난 글에서 INNER JOIN에 대해서 알아봤으니 이번 글에서는 OUTER JOIN에 대해서 알아보겠다.

http://crazykim2.tistory.com/203


- OUTER JOIN이란?

 1. 두 테이블을 결합할 때 어느 한 쪽의 테이블의 결과를 모두 나오게합니다.

 2. 방식은 INNER JOIN이랑 같습니다.

 3. 다른 점은 LEFT OUTER JOIN을 하는 경우 왼쪽 테이블의 모든 데이터의 결과가 나오고, RIGHT OUTER JOIN을 하는 경우 오른쪽 테이블의 모든 데이터의 결과가 나옵니다.

 4. 보통 실제환경에서는 INNER JOIN보다는 OUTER JOIN을 더 많이 사용합니다.


 - SQL문 실습(OUTER JOIN)

실습 문제를 풀어보면서 OUTER JOIN에 대해서 알아보겠습니다.


1. 

- 문제

1
2
3
4
5
6
7
8
9
10
11
12
--Select Customers, Orders
--Use CusomterID columns for join between Cusomters and orders(Customers must search all)
--Select Column
--Customers.CustomerID, Customers.CompanyName
--Last, Select Only customers not exists orders
------------------------------------------------------------------------------
SELECT C.CustomerID
    ,C.CompanyName
FROM Customers C 
LEFT OUTER JOIN Orders O ON C.CustomerID = O.CustomerID
                        AND O.OrderDate >= '1996-07-01' AND O.OrderDate < '1996-08-01' 
WHERE O.OrderID IS NULL
cs

사용방법은 INNER JOIN과 동일합니다.

LEFT, RIGHT의 기준은 모든 데이터를 보여줄 테이블을 기준으로 LEFT, RIGHT를 정해줍니다.

보통 LEFT OUTER JOIN을 많이 사용합니다. 

문제에서 Customers의 모든 데이터를 Search하라고 했으므로 Customer를 LEFT OUTER JOIN을 걸어주고, customers중에서 주문이 존재하지 않는 customer를 가져오라고 했으므로, NULL조건을 걸어서 찾아줍니다.


- 답



2. 

- 문제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--Select Customers, Orders
--CustomerID Column use for join between Customers and Orders(Customers must search all)
--Select Column :
--Customers.CustomerID, OrderCount
--OrderCount : Count of orders by CustomerID
--Sort by OrderCount Ascending
------------------------------------------------------------------------------
SELECT C.CustomerID
    ,COUNT(O.OrderID) OrderCount
FROM Customers C 
LEFT OUTER JOIN Orders O ON C.CustomerID = O.CustomerID
WHERE O.OrderDate >= '1996-07-01' AND O.OrderDate < '1996-08-01'
GROUP BY C.CustomerID
ORDER BY COUNT(O.OrderID)
cs

이전 문제와 마찬가지로 Customers 테이블에 LEFT OUTER JOIN을 겁니다.

그리고 GROUP BY를 사용해서 Customer의 총 주문 수를 계산합니다.

마지막으로 ORDER BY를 사용해서 주문이 적은 순서대로 정렬을 합니다.


- 답



3. 

- 문제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
--Use Employees, Orders tables
--EmployeeID column use for join Employees and Orders(Employee must search all)
--Select Columns
--:EmployeeID, TTLFreight
--TTLFreight = Sum of Freight by EmployeeID
--Sort TTLFreigt Ascending
------------------------------------------------------------------------------
SELECT E.EmployeeID
    ,SUM(
        CASE
            WHEN O.OrderID IS NULL 
            THEN 0
            ELSE O.Freight
        END) TTL_Freight
FROM Employees E 
LEFT OUTER JOIN Orders O ON E.EmployeeID = O.EmployeeID
                        AND O.OrderDate >= '1996-07-01' AND O.OrderDate < '1996-08-01'
GROUP BY.EmployeeID
ORDER BY TTL_Freight
cs

Employees 테이블에 LEFT OUTER JOIN을 걸은 후 Employee에 대한 Freight의 합을 구한다.


- 답



예제는 여기까지 풀어보겠습니다.

거희 단순 반복이라서 더 이상 풀어볼 이유가 없을 것 같습니다.

다음 글에서는 SUB QUERY에 대해서 설명하고 SUB QUERY를 실습해보겠습니다.


출처 : SQL Server 기본 SQL문 교육

반응형
그리드형

'프로그래밍 > MS-SQL' 카테고리의 다른 글

SQL문 실습 - SUB QUERY (2)  (0) 2016.07.24
SQL문 실습 - SUB QUERY (1)  (0) 2016.07.24
SQL문 실습 - INNER JOIN(1)  (0) 2016.06.29
MSSQL - SQL Server 단축키  (0) 2016.06.27
SQL서버 CLR 활성화시키기  (0) 2016.06.14