[MSSQL] UNION , UNION ALL 이란

우선 UNION ALL , UNION 은 쿼리에서 아래와 같은 역할을 합니다.

 

공통점 : 쿼리를 합쳐주는 역할을 한다

차이점 : 중복 제거해주는지 중복 허용하는지

  • UNION ALL : 중복 허용
  • UNION         : 중복 제거

 

두개 모두 성능에는 좋은 영향을 주지 않지만

특히 쿼리 성능이 저하되기 때문에 최대한 UNION 사용은 지양해야합니다. 

 

주의사항은 컬럼의 개수, 데이터 타입이 모두 같아야합니다. 

 

사용법은 아래와 같습니다.

 

 

UNION 

- TESTTABLE 

USERID NAME
1004 천사
9999 악마

 

SELECT *
FROM TESTTABLE A WITH(NOLOCK)
WHERE A.USERID = '1004'
AND   A.NAME   = '천사'

UNION

SELECT *
FROM TESTTABLE B WITH(NOLOCK)
WHERE A.USERID = '9999'
AND   A.NAME   = '악마'

UNION

SELECT *
FROM TESTTABLE B WITH(NOLOCK)
WHERE A.USERID = '1004'
AND   A.NAME   = '천사'

조회되는 테이블

USERID NAME
1004 천사
9999 악마
1004 천사 

 

맨 아래 USERID 와 NAME 이 같은 천사는 중복 제거가 되게 됩니다.

 

UNION ALL 

- TESTTABLE

USERID NAME
1004 천사
9999 악마

 

SELECT *
FROM TESTTABLE A WITH(NOLOCK)
WHERE A.USERID = '1004'
AND   A.NAME   = '천사'

UNION ALL

SELECT *
FROM TESTTABLE B WITH(NOLOCK)
WHERE A.USERID = '9999'
AND   A.NAME   = '악마'

UNION ALL

SELECT *
FROM TESTTABLE B WITH(NOLOCK)
WHERE A.USERID = '1004'
AND   A.NAME   = '천사'

조회되는 테이블

USERID NAME
1004 천사
9999 악마
1004 천사

 

 

중복된 UNION ALL 도 조회가 되게 됩니다.