loading

프로그래밍/MS-SQL

SQL문 실습 - UNION/UNION ALL

침착곰 2016. 7. 24. 18:50
반응형

- SQL문 실습 - UNION/UNION ALL -


1. UNION/UNION ALL이란?

 - 두 개의 SELECT문을 합치는 것을 말합니다.

 - 두 개의 SELECT문을 합치는 것이기때문에 제약조건이 많습니다.


2. UNION/UNION ALL의 제약조건

 - 상위SQL문과 하위SQL문의 컬럼 개수가 동일해야 합니다.

 - 상위SQL문과 하위SQL문의 컬럼 위치가 동일한 컬럼들이 결합이 됩니다.

  ※ 컬럼 이름만 동일하다고 결합이 되지 않습니다.

 - 컬럼명은 최상위 SQL문의 명칭을 따르게 됩니다.


3. UNION과 UNION ALL의 차이점

 - UNION은 중복된 행을 제거하지만 UNION ALL은 중복된 행을 허용합니다.

 - 중복된 행을 꼭 제거해야하는 경우가 아니라면 보통 UNION ALL을 사용합니다.

 - 실제 환경에서는 UNION을 사용하느 경우는 극히 드뭅니다.


4. UNION/UNION ALL실습

 - 문제

1
2
3
4
--1. 다음 SQL의 IN을 UNION ALL을 사용해서 해결하시오.
SELECT *
  FROM Orders T1
 WHERE T1.CustomerID IN ('ALFKI''TOMSP''VINET')
cs


 - 답

 - 위의 IN조건을 UNION ALL을 사용해서 나타내봤습니다.

1
2
3
4
5
6
7
8
9
10
11
SELECT *
  FROM Orders T1
 WHERE T1.CustomerID = 'ALFKI'
UNION ALL
SELECT *
  FROM Orders T2
 WHERE T2.CustomerID = 'TOMSP'
UNION ALL
SELECT *
  FROM Orders T3
 WHERE T3.CustomerID = 'VINET'
cs


 

 - 문제

1
2
3
4
--2. Orders테이블을 조회
-- Orders의 OrderDate가 1996-07인 데이터만 조회
-- EmployeeID별로, 주문건수를 구하고,
-- 마지막에 주문건수를 추가해서 보여주어라.
cs


 - 답

 - UNION ALL을 사용해서 1996년도의 EmployeeID의 각 주문횟수와

 - 맨 밑의 데이터에는 1996년도의 총 주문횟수를 구했습니다.

1
2
3
4
5
6
7
8
SELECT CONVERT(NCHAR(10), T1.EmployeeID) EmployeeID, COUNT(*) OrderCount
  FROM Orders T1
 WHERE T1.OrderDate >= '1996-07-01' AND T1.OrderDate < '1996-08-01'
GROUP BY EmployeeID
UNION ALL
SELECT 'TTL' EmployeeID, COUNT(*) OrderCount
  FROM Orders T2
 WHERE T2.OrderDate >= '1996-07-01' AND T2.OrderDate < '1996-08-01'
cs

다음 글에서는 SQL Server 기본 SQL문 교육의 마지막인 LevelUpTest를 풀어보면서 설명을 해보겠습니다.


출처 : SQL Server 기본 SQL문 교육

반응형
그리드형

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

MS-SQL 컬럼 추가/수정/삭제  (0) 2016.08.28
MSSQL COALESCE함수  (0) 2016.08.10
SQL문 실습 - TOP  (0) 2016.07.24
SQL문 실습 - SUB QUERY (2)  (0) 2016.07.24
SQL문 실습 - SUB QUERY (1)  (0) 2016.07.24