UNION으로 결과 집합 조합

UNION 연산자를 사용하여 둘 이상의 SELECT 문 결과를 단일 결과 집합으로 결합할 수 있습니다. UNION을 사용하여 결합된 결과 집합은 모두 같은 구조를 가져야 합니다. 즉, 열의 개수가 같아야 하고 해당 결과 집합 열은 호환되는 데이터 형식을 가져야 합니다. 자세한 내용은 Union 사용에 대한 지침을 참조하십시오.

다음과 같이 UNION을 지정합니다.

select_statement UNION [ALL] select_statement

예를 들어 Table1Table2는 동일한 2열 구조를 가집니다.

TABLE1

 

 

TABLE2

 

COLUMNA

COLUMNB

 

COLUMNC

COLUMND

CHAR(4)

INT

 

CHAR(4)

INT

-------

---

 

-------

---

ABC

  1

 

GHI

  3

DEF

  2

 

JKL

  4

GHI

  3

 

MNO

  5

이 쿼리에서는 테이블 간에 UNION을 만듭니다.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

결과 집합은 다음과 같습니다.

ColumnA  ColumnB
-------  --------
abc      1
def      2
ghi      3
jkl      4
mno      5

UNION의 결과 집합 열 이름은 UNION의 첫 번째 SELECT 문의 결과 집합에 있는 열 이름과 동일합니다. 다른 SELECT 문의 결과 집합 열 이름은 무시됩니다.

기본적으로 UNION 연산자는 결과 집합에서 중복 행을 제거합니다. ALL을 사용하면 결과에 모든 행이 포함되고 중복 행은 제거되지 않습니다.

UNION 연산의 정확한 결과는 설치 중 선택한 데이터 정렬 및 ORDER BY 절에 따라 달라집니다. 다양한 데이터 정렬의 효과에 대한 자세한 내용은 데이터 정렬 작업을 참조하십시오.

Transact-SQL 문에 다수의 UNION 연산자가 나올 수 있습니다. 예를 들면 다음과 같습니다.

SELECT * FROM TableA
UNION
SELECT * FROM TableB
UNION
SELECT * FROM TableC
UNION
SELECT * FROM TableD

기본적으로 SQL Server 2005 에서는 UNION 연산자가 있는 문을 왼쪽에서 오른쪽으로 계산합니다. 계산 순서를 지정하려면 괄호를 사용합니다. 예를 들어 다음 두 개의 문은 동일하지 않습니다.

/* First statement. */
SELECT * FROM TableA
UNION ALL
(   SELECT * FROM TableB
   UNION
   SELECT * FROM TableC
)
GO

/* Second statement. */
(SELECT * FROM TableA
 UNION ALL
 SELECT * FROM TableB
)
UNION
SELECT * FROM TableC)
GO

주의

첫 번째 문의 경우 TableBTableC 간의 UNION에서 중복 행이 제거됩니다. 이 집합과 TableA 간의 UNION에서 중복 행은 제거되지 않습니다. 두 번째 문의 경우 중복 행은 TableATableB 간의 UNION에 포함되지만 TableC와의 후속 UNION에서 삭제됩니다. ALL은 이 식의 최종 결과에 영향을 주지 않습니다.

UNION이 사용되면 개별 SELECT 문에 ORDER BY 또는 COMPUTE 절을 사용할 수 없습니다. 마지막 SELECT 문 다음에는 ORDER BY 또는 COMPUTE 절을 한 번만 사용할 수 있습니다. 즉, 이러한 절은 결합된 최종 결과 집합에 적용됩니다. GROUP BY 및 HAVING은 개별 SELECT 문에서만 지정할 수 있습니다.

참고 항목

개념

UNION, EXCEPT 및 INTERSECT에 다른 Transact-SQL 문 사용

관련 자료

UNION(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기