Union 사용에 대한 지침
UNION 연산자를 사용할 때는 다음 지침을 따릅니다.
UNION과 조합되는 문의 모든 SELECT 목록은 같은 수의 식(열 이름, 산술 식, 집계 함수 등)을 가져야 합니다.
UNION과 조합되는 결과 집합의 해당 열 또는 개별 쿼리에 사용되는 열의 하위 집합은 동일한 데이터 형식이거나 두 데이터 형식 간 암시적 데이터 변환이 가능하거나 또는 명시적 변환을 제공해야 합니다. 예를 들어 datetime 데이터 형식 열과 binary 데이터 형식 열의 경우 명시적 변환을 제공하지 않으면 두 열 간에 UNION 연산이 수행되지 않습니다. 단, money 데이터 형식 열과 int 데이터 형식 열은 암시적으로 변환될 수 있으므로 UNION 연산이 수행됩니다.
xml 데이터 형식의 열은 동등한 형식이어야 합니다. 모든 열이 XML 스키마로 형식화되거나 모두 형식화되지 않아야 합니다. 형식화된 경우 모든 열이 동일한 XML 스키마 컬렉션으로 형식화되어야 합니다.
UNION은 개별 쿼리에 지정된 순서에 따라 열을 일 대 일로 비교하기 때문에 UNION으로 조합되는 문의 대응되는 결과 집합 열은 그 순서가 같아야 합니다.
다음 예를 살펴보십시오.
TABLE3
TABLE4
A
B
C
A
B
INT
CHAR(4)
CHAR(4)
CHAR(4)
FLOAT
---
-------
-------
-------
-------
1
ABC
JKL
JKL
1.000
2
DEF
MNO
MNO
5.000
3
GHI
PQR
다음 쿼리를 실행합니다.
SELECT a, b FROM table3 UNION SELECT b, a FROM table4
결과 집합은 다음과 같습니다.
a b -------- ----- 1.000000 abc 2.000000 def 3.000000 ghi 1.000000 jkl 5.000000 mno
UNION 연산에서 서로 다른 데이터 형식을 조합하면 이를 변환하는 데 데이터 형식의 우선 순위 규칙이 사용됩니다. 앞의 예에서는 int 값이 float로 변환되는데 이는 float가 int보다 우선 순위가 높기 때문입니다. 자세한 내용은 데이터 형식 우선 순위(Transact-SQL)를 참조하십시오.
다음 쿼리는 대응되는 열의 데이터 형식이 호환되지 않으므로 오류 메시지를 생성합니다.
SELECT b, c FROM table3 UNION SELECT a, b FROM table4
UNION으로 만들어진 테이블의 열 이름은 UNION 문의 첫 번째 개별 쿼리에서 가져옵니다. 결과 집합의 열을 새 이름으로 참조하려면(예: ORDER BY 절) 다음과 같이 첫 번째 SELECT에서 해당 열을 참조해야 합니다.
SELECT city AS Cities FROM stores_west UNION SELECT city FROM stores_east ORDER BY city