[ 집합연산자의 종류 ]
집합연산자(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 |