본문 바로가기
카테고리 없음

SQL 집합 연산자: UNION, INTERSECT, MINUS 활용

by moment-love 2025. 1. 31.

 

SQL 집합 연산자: UNION, INTERSECT, MINUS 활용

 

SQL에서 집합 연산자(Set Operators)는 여러 개의 SELECT 결과를 하나로 결합할 때 사용됩니다.

대표적으로 UNION, UNION ALL, INTERSECT, MINUS(EXCEPT)가 있으며, 이들은 중복 제거 여부 및 데이터 비교 방식에서 차이를 가집니다.

이번 글에서는 각 집합 연산자의 개념과 사용 방법을 샘플 테이블과 함께 알아보겠습니다.

 


1. UNION: 두 쿼리의 결과를 결합하고 중복 제거

UNION 연산자는 두 개의 SELECT 결과를 하나로 합치되, 중복된 행을 자동으로 제거합니다.

두 쿼리의 열 개수와 데이터 타입이 동일해야 합니다.

 

 
SELECT EmployeeName FROM EmployeesA  
UNION  
SELECT EmployeeName FROM EmployeesB;

 

 

위 쿼리는 EmployeesA와 EmployeesB 테이블에서 중복되지 않은 직원명 목록을 출력합니다.

UNION은 기본적으로 중복 제거 과정이 포함되어 있어 결과적으로 정렬된 상태로 반환됩니다.

중복 제거로 인해 실행 속도가 느려질 수 있으므로, 필요에 따라 UNION ALL을 사용할 수도 있습니다.

 

출력 결과 예시

 

EmployeeName
Alice
Bob
Jane
John
Tom

 

 


2. UNION ALL: 중복 포함하여 두 결과 결합

 

UNION ALL은 UNION과 동일한 방식으로 결과를 결합하지만, 중복된 데이터를 제거하지 않고 그대로 출력합니다.

 

SELECT EmployeeName FROM EmployeesA  
UNION ALL  
SELECT EmployeeName FROM EmployeesB;

 

 

이 쿼리는 EmployeesA와 EmployeesB 테이블에서 중복된 직원명도 포함하여 출력합니다.

UNION ALL은 중복 제거 과정이 없으므로 실행 속도가 더 빠르며, 데이터 분석 시 중복 값을 유지해야 할 경우 유용합니다.

 

 

출력 결과 예시

 

EmployeeName
Alice
Bob
Jane
Jane
John
Tom

 


3. INTERSECT: 두 쿼리의 공통된 데이터 조회

 

INTERSECT는 두 개의 SELECT 결과에서 공통으로 존재하는 행만 반환합니다.

 

SELECT EmployeeName FROM EmployeesA  
INTERSECT  
SELECT EmployeeName FROM EmployeesB;

 

이 쿼리는 EmployeesA와 EmployeesB 테이블에서 두 테이블에 공통으로 존재하는 직원명만 출력합니다.

중복 값은 자동으로 제거되며, 정렬된 형태로 반환됩니다.

 

 

출력 결과 예시

 

EmployeeName
Jane

 

 


4. MINUS: 첫 번째 쿼리 결과에서 두 번째 쿼리 결과를 제외

 

MINUS 연산자는 첫 번째 SELECT 결과에서 두 번째 SELECT 결과에 존재하는 데이터를 제외하고 반환합니다.

(MySQL에서는 EXCEPT 연산자로 동일한 기능을 수행함.)

 

 

SELECT EmployeeName FROM EmployeesA  
MINUS  
SELECT EmployeeName FROM EmployeesB;

 

이 쿼리는 EmployeesA 테이블에 존재하지만 EmployeesB 테이블에는 없는 직원명을 출력합니다. MINUS는 중복을 제거한 후 정렬된 상태로 반환됩니다.

 

출력 결과 예시

 

EmployeeName
Alice
John

 


 

5. EXCEPT: MINUS와 동일한 기능 (MySQL 및 SQL Server에서 사용)

 

SQL Server와 MySQL에서는 MINUS 대신 EXCEPT 연산자를 사용하여 첫 번째 SELECT 결과에서 두 번째 SELECT 결과를 제외할 수 있습니다.

 

SELECT EmployeeName FROM EmployeesA  
EXCEPT  
SELECT EmployeeName FROM EmployeesB;

 

 

이 쿼리는 MINUS와 동일하게 EmployeesA 테이블에 있지만 EmployeesB 테이블에는 없는 직원명을 출력합니다.

 

 

출력 결과 예시

 

EmployeeName
Alice
John

 


6. SQL 집합 연산자 비교 정리

 

연산자 설명 중복 제거 여부 정렬 여부
UNION 두 개의 SELECT 결과를 결합 O (중복 제거) O (자동 정렬)
UNION ALL 두 개의 SELECT 결과를 결합 X (중복 포함) X (정렬 없음)
INTERSECT 두 개의 SELECT 결과에서 공통된 데이터 출력 O (중복 제거) O (자동 정렬)
MINUS 첫 번째 SELECT 결과에서 두 번째 결과를 제외 O (중복 제거) O (자동 정렬)
EXCEPT MINUS와 동일 (MySQL, SQL Server에서 사용) O (중복 제거) O (자동 정렬)

 

 


7. 결론

 

UNION / UNION ALL → 여러 SELECT 결과를 하나로 결합.


INTERSECT → 두 테이블의 공통된 데이터를 조회.


MINUS / EXCEPT → 첫 번째 테이블의 데이터에서 두 번째 테이블의 데이터를 제외.


중복 제거 여부와 실행 속도를 고려하여 적절한 집합 연산자를 선택해야 함.

SQLD 자격증 대비를 위해 각 집합 연산자의 특징과 차이점, 실행 순서를 정확히 이해하고 실습해 보세요!

 

반응형