안녕하세요. SQLER의 코난 김대우입니다. 
이번 강좌에서는, 2-12. SQL UNION 연산자를 진행 하겠습니다.


SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록

 

이번에 진행할 강좌는 테이블을 합치는 또 다른 방법, UNION입니다.

 

 

 

TL;DR

UNION 연산자로 두 개 이상의 쿼리 결과를 하나의 결과셋으로 합칠 수 있습니다. 결과셋은 컬럼 구조와 데이터형이 유사하고, 상호 변환 가능해야 합니다. 기본 중복 데이터는 제거되고, UNION ALL 옵션은 중복 데이터도 포함합니다.


 

UNION 구문 예제

UNION은 두 개의 결과셋을 결합합니다. JOIN이 가로로 두 개의 결과셋을 연결한다면, UNION은 세로로 결과셋을 연결합니다.


배우테이블1

이름
번호
구교환 1
송중기 2
김태리 3


배우테이블2

이름
번호
김태리 3
박은빈 4
박서준 5


이렇게 두 개의 테이블이 있다고 가정하겠습니다. SQL 구문은 아래처럼 수행해 테이블 데이터를 합칠 수 있습니다.

 

USE AdventureWorks;
GO

-- 만약 테이블이 존재하면 삭제
IF OBJECT_ID(N'dbo.ActorTable1', N'U') IS NOT NULL  
   DROP TABLE dbo.ActorTable1;
IF OBJECT_ID(N'dbo.ActorTable2', N'U') IS NOT NULL  
   DROP TABLE dbo.ActorTable2;
GO

--ActorTable1 생성
CREATE TABLE ActorTable1(
  ActorNum NVARCHAR(10),
  ActorName INT
);
GO

--ActorTable2 생성
CREATE TABLE ActorTable2(
  ActorNum NVARCHAR(10),
  ActorName INT
);
GO

--table1에 데이터 삽입
INSERT INTO ActorTable1 VALUES(N'구교환',1);
INSERT INTO ActorTable1 VALUES(N'송중기',2);
INSERT INTO ActorTable1 VALUES(N'김태리',3);
GO

--table2에 데이터 삽입
INSERT INTO ActorTable2 VALUES(N'김태리',3);
INSERT INTO ActorTable2 VALUES(N'박은빈',4);
INSERT INTO ActorTable2 VALUES(N'박서준',5);
GO

 

테이블 생성 구문과 INSERT 구문은 나중에 배우게 됩니다.


두 테이블에서 데이터를 조회합니다.

SELECT * FROM ActorTable1;
SELECT * FROM ActorTable2;


SELECT를 실행한 결과는 이런 식일 겁니다.

ActorNum   ActorName
---------- -----------
구교환        1
송중기        2
김태리        3

ActorNum   ActorName
---------- -----------
김태리        3
박은빈        4
박서준        5

 

UNION 구문

자, 그럼 UNION을 사용해 두 개의 테이블을 세로로 합쳐보겠습니다.

 

SELECT * FROM ActorTable1
UNION
SELECT * FROM ActorTable2;
GO

결과
ActorNum   ActorName
---------- -----------
구교환        1
김태리        3
박서준        5
박은빈        4
송중기        2

(5개 행이 영향을 받음)

 

이렇게 두 개의 테이블을 세로로 합칠 수 있습니다. 결과를 조금만 더 살펴보겠습니다.

 

UNION 연산자 - 중복 데이터 처리

두 개의 테이블, 총 6개의 로우인데 UNION 결과는 5개만 출력됩니다. 조금 더 살펴보면 중복 데이터 김태리가 하나 삭제되었습니다.
중복 데이터 역시 보이게 하려면 어떻게 할까요? 

 

UNION ALL 구문

UNION ALL을 수행하면 중복 데이터도 출력합니다.

SELECT * FROM ActorTable1
UNION ALL
SELECT * FROM ActorTable2;
GO

결과
ActorNum   ActorName
---------- -----------
구교환        1
송중기        2
김태리        3
김태리        3
박은빈        4
박서준        5

(6개 행이 영향을 받음)

 

UNION ALL은 이렇게 중복된 데이터 “김태리” 로우도 출력하게 됩니다.


UNION을 사용할 때 주의해야 할 사항은 합쳐질 결과셋의 컬럼 구조와 컬럼 리스트 숫자가 같아야 하는 제약이 있습니다. 두 결과셋을 합치는데 당연히 구조가 다르면 합칠 수 없겠죠.


그럼 UNION 구문에 대해서 조금 더 살펴보겠습니다.

 

UNION 연산자 구문 정보

둘 이상의 쿼리 결과셋을 하나의 결과셋으로 출력한다.

SELECT select_list…
UNION [ALL]
SELECT select_list


고려사항

- UNION의 대상이 되는 결과셋 컬럼 구조가 일치해야 하며 데이터형도 호환되어야 함.
- 결과에서 중복된 행은 제거.
- ALL옵션을 사용하면 모든 행을 포함.
- ORDER BY 절을 포함하고 있으면 전체 결과가 정렬.
- 결과셋의 컬럼 이름은 첫 번째 SELECT 문의 컬럼명으로 설정됨.


UNION도 가끔 사용할 경우가 있습니다. 비슷한 구조의 테이블을 합치는 경우는 생각보다 자주 있습니다. 일별로 분리된 로그성 테이블을 조합해 통계 정보를 출력하거나 분석을 수행할 경우 이렇게 UNION을 수행하면 테이블을 합쳐서 진행할 수 있어서 수월합니다.
 

 

SQL 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 마이크로소프트 SQL Server 2022 

책구매링크.png

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 23661
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12430
» SQL강좌: 2-12. SQL UNION 연산자 코난(김대우) 2023.08.18 48
2233 SQL강좌: 2-11. SELECT INTO - 쿼리 결과를 테이블로 복사 코난(김대우) 2023.08.18 96
2232 SQL강좌: 2-10. 하위 쿼리(Subquery-서브쿼리) 코난(김대우) 2023.08.18 68
2231 SQL강좌: 2-9. JOIN - 테이블 연결 file 코난(김대우) 2023.08.18 113
2230 SQL강좌: 2-8. GROUP BY, ROLLUP, CUBE 코난(김대우) 2023.08.18 111
2229 SQL강좌: 2-7. ORDER BY 결과 정렬 코난(김대우) 2023.08.18 76
2228 SQL강좌: 2-6. DISTINCT 문을 이용한 중복 제거 코난(김대우) 2023.08.18 73
2227 SQL강좌: 2-5. WHERE절의 조건에 의한 행의 검색 코난(김대우) 2023.08.18 77
2226 SQL강좌: 2-4. 데이터형(Data type)과 함수(Function) 코난(김대우) 2023.08.18 107
2225 SQL강좌: 2-3. SELECT - 컬럼선택 file 코난(김대우) 2023.08.18 118
2224 SQL강좌: 2-2. 데이터 검색 - SELECT 구문 file 코난(김대우) 2023.08.18 130
2223 SQL강좌: 2-1. T-SQL SQL Server 언어에 대한 간단한 소개 file 코난(김대우) 2023.08.18 130
2222 SQL강좌: 1-11. 예제 데이터베이스 설치 코난(김대우) 2023.08.18 161
2221 SQL강좌: 1-10. SQL Server 2022 관리 도구 소개 [2] file 코난(김대우) 2023.08.18 100
2220 SQL강좌: 1-9. 업그레이드와 설치 제거 file 코난(김대우) 2023.08.18 54
2219 SQL강좌: 1-8. SQL Server 2022 설치 - 컨테이너 file 코난(김대우) 2023.08.18 65
2218 SQL강좌: 1-7. SQL Server 2022 설치 - 리눅스 file 코난(김대우) 2023.08.18 77
2217 SQL강좌: 1-6. SQL Server 2022 설치 - 윈도 [2] file 코난(김대우) 2023.08.18 210
2216 SQL강좌: 1-5. SQL클라우드와 On-Premise file 코난(김대우) 2023.08.18 95
2215 SQL강좌: 1-4. SQL Server 설치 전 점검사항 file 코난(김대우) 2023.08.18 88





XE Login