개주 훈련일지/📚 코살대 교본 학습

SQL) 집합연산자

lshfood2 2026. 1. 24. 11:52

[ 집합연산자의 종류 ]

집합연산자(SET OPERATOR)는

SELECT문의 결과집합 간의 

연산을 수행하는 연산자이다.

 

종류로는 UNION, UNION ALL,

INTERSECT, EXCEPT(MINUS)가 있다.

 

각각 SQL문의 결과집합을 대상으로 

연산을 수행하기 때문에 여러 개의 SQL문을

하나의 SQL문으로 만드는 연산자라고 할 수 있다.

종류 설명
UNION 여러 개 SQL문의 결과에 대한 합집합
중복된 행은 1개의 행으로 출력
이 과정에서 정렬이 발생할 수도 있음
UNION ALL 여러 개 SQL문의 결과에 대한 합집합
중복된 행도 그대로 결과로 표시
INTERSECT 여러 개 SQL문의 결과에 대한 교집합
중복된 행은 하나로 표시
EXCEPT
(MINUS)
위 SQL문의 집합에서 아래 SQL문의
집합을 뺀 결과를 표시

 

※ MINUS 연산 시 주의점

MINUS를 하는 경우 중복된 결과집합은

중복이 제거된 상태로 출력된다.

 

만약 중복된 결과를 그대로 출력하면서

특정 값만 집합에서 제외하고 싶다면

별도의 서브 쿼리를 활용해야 한다.


[ UNION 코드 예시 ]

-- MEMBER: { 1, 2, 3, 3 } (3이 중복으로 존재한다고 가정)
-- VIP_MEMBER: { 3, 4 }
-- 고객 + VIP 목록을 합치되(합집합), 중복 행은 1번만 출력
SELECT member_id
FROM MEMBER
UNION
SELECT member_id
FROM VIP_MEMBER;

 

UNION → 합치고 중복 제거

  • 결과 : { 1, 2, 3, 4 }

[ UNION ALL 코드 예시 ]

-- MEMBER: { 1, 2, 3, 3 } (3이 중복으로 존재한다고 가정)
-- VIP_MEMBER: { 3, 4 }
-- 고객 + VIP 목록을 합치되, 중복 행도 그대로 출력(빠름)
SELECT member_id
FROM MEMBER
UNION ALL
SELECT member_id
FROM VIP_MEMBER;

UNION ALL → 합치고 중복 유지

  • 결과 : { 1, 2, 3, 3, 3, 4 }
  • MEMBER의 3 두 개 + VIP의 3 한 개 = 3이 총 3개

[ INTERSECT 코드 예시 ]

-- MEMBER: { 1, 2, 3, 3 } (3이 중복으로 존재한다고 가정)
-- VIP_MEMBER: { 3, 4 }
-- MEMBER와 VIP_MEMBER에 "둘 다" 존재하는 member_id만 출력
SELECT member_id
FROM MEMBER
INTERSECT
SELECT member_id
FROM VIP_MEMBER;

INTERSECT → 둘 다 있는 값만, 중복 제거

  • 결과 : { 3 }

[ MINUS 코드 예시 ]

-- MEMBER: { 1, 2, 3, 3 } (3이 중복으로 존재한다고 가정)
-- VIP_MEMBER: { 3, 4 }
-- (Oracle) 
-- MEMBER에는 있는데 VIP_MEMBER에는 없는 member_id만 출력
SELECT member_id
FROM MEMBER
MINUS
SELECT member_id
FROM VIP_MEMBER;

MINUS → MEMBER - VIP_MEMBER, 중복 제거

  • 결과 : { 1, 2 }
  • 3은 VIP에도 있으니 빠짐

'개주 훈련일지 > 📚 코살대 교본 학습' 카테고리의 다른 글

제어 모델링  (0) 2026.01.24
SQL) 계층형 질의와 셀프 조인  (0) 2026.01.24
SQL) 표준 조인  (0) 2026.01.24
동적 모델링  (1) 2026.01.21
SQL) JOIN  (0) 2026.01.20