union은 보통 컬럼의 개수와 데이터 형식이 동일한 서로다른 두개의 테이블을 select 쿼리 할때 하나로 합쳐주는 기능을 한다. 예를 들어 select * from table1 select * from table2를 하면 질의 결과 2개의 테이블이 따로 나오게 되지만 union을 사용하게 된다면 table1과 table2가 전부 결과에 나온다.
보통 union 함수를 사용하는 경우는 2개의 테이블의 모든 데이터를 보기위해서 할때 도 있지만 합계를 맨 아래쪽에 나타내기 위해서도 사용한다. 물론 Rollup이라는 함수가 있지만 해당 함수는 그룹으로 묶어서 보여주기 때문에 그룹으로 묶어서 나타내기 싫을 경우 union을 사용하면 된다.
1. UNION 과 UNION ALL
union함수는 그냥 union과 union all이 있다.
먼저 union은 컬럼의 중복을 제거해서 나타내어 준다. union all은 중복을 무시하고 그냥 모두 다 나타내준다.
그래서 성능면에서 union은 중복을 제거하는 기능때문에 더 느리다. 느리기 때문에 특별한 경우를 제외하고 보통은 union all을 대체적으로 사용하게 된다.
2. UNION ALL 사용하기
그러면 union all을 사용해서 두개의 테이블을 합쳐서 select 조회를 해보도록 하겠다.
먼저 union all을 사용하지 않을 경우 select를 2번해서 결과가 각각 따로 나오게 된다.
SELECT * FROM TEST
SELECT * FROM TEST2
여기서 union을 사용한다면 결과가 하나로 나오게 되고 두개의 테이블이 합쳐져서 나오게 된다.
SELECT * FROM TEST
UNION ALL
SELECT * FROM TEST2
이렇게 간단하게 union을 사용해서 테이블의 결과를 하나로 나타내도록 하였다.
3. UNION을 활용한 합계 나타내기(응용)
그러면 union을 활용해서 마지막줄에 합계를 나타내보도록 하겠다.
union을 사용할때는 항상 합치려는 테이블과의 컬럼갯수와 동일해야한다. 그래서 합계를 내기위한 테이블을 임의로 만들 때 id, name,item1,item2,item3의 컬럼을 모두 정의해줘야한다.
아래의 명령어 처럼 입력하면 합계가 나타난다.
SELECT * FROM TEST
UNION ALL
SELECT '' AS ID, '합계' AS NAME, SUM(ITEM1),SUM(ITEM2),SUM(ITEM3) FROM TEST
그러면 이런식으로 합계를 나타내는 질의문으로 응용 할 수 있다.
'데이터베이스 > MSSQL' 카테고리의 다른 글
[MSSQL] 그룹별로 문자열 묶어서 나타내기(STRING_AGG / STUFF, FOR XML PATH) (1) | 2024.09.24 |
---|---|
[MSSQL] PIVOT을 사용하여 행값을 컬럼으로 바꾸기 (0) | 2024.09.01 |
[MSSQL] CASE문 다루기 (0) | 2024.08.30 |
[MSSQL] 데이터베이스 백업/복원하기 & 복원 에러 해결 (0) | 2024.08.20 |
[MSSQL] 여러 조건으로 UPDATE 시키기 (UPDATE SET CASE...) (0) | 2024.08.19 |