오늘은 SQL의 집합 연산자에 대해 정리해봅니다.
2가지 이상의 SELECT절의 결과를 1개로 통합하는 데 사용하는 연산자로,
- 합집합: UNION (중복 X), UNION ALL (중복 O)
- 교집합: INTERSECT (중복 X)
- 차집합: EXCEPT (중복 X)
이렇게 4가지를 사용합니다. 예제로 알아보겠습니다.
✔Table of Contents
1. 합집합 연산자 (UNION, UNION ALL)
먼저 우리가 사용할 데이터는 [MEMBER_1], [MEMBER_2] 라는 2개의 데이터입니다.
이 2가지 데이터는 겹치는 데이터가 있는 서로 다른 데이터입니다. 한번 살펴봅시다.
USE EDU
SELECT * FROM [MEMBER_1]
SELECT * FROM [MEMBER_2]
이렇게 두 데이터는 회원번호 '1000006', '1000007' 번이 겹치네요!
이 두가지를 합쳐 한번에 보여주는 합집합 연산자를 사용합니다.
-- 합집합 row-bind 결합
SELECT * FROM [MEMBER_1]
UNION
SELECT * FROM [MEMBER_2]
먼저 UNION을 사용합니다. 이 연산자는 중복이 없이 결합하기 때문에 중복이었던 100006, 100007번 데이터가 1개만 나옵니다.
SELECT * FROM [MEMBER_1]
UNION ALL
SELECT * FROM [MEMBER_2]
하지만 UNION ALL은 중복을 그대로 허용하여 결합합니다.
그래서 100006, 1000007번 데이터가 중복되어 2개씩 나타난 것을 볼 수 있습니다.
2. 교집합 연산자 (INTERSECT)
교집합을 하면 당연히 공통되는 것만 나오게 되겠죠? 당연히 중복도 제거합니다.
-- 교집합 row-bind 결합
-- INTERSECT (중복X)
SELECT * FROM [MEMBER_1]
INTERSECT
SELECT * FROM [MEMBER_2]
이렇게 1000006, 1000007 번만 뽑힙니다.
3. 차집합 연산자 (EXCEPT)
마지막으로 차집합 연산자는 처음 쓴 데이터에서 나중에 쓴 데이터와 겹치는 값을 빼서 반환합니다. 당연히 중복도 제거되겠죠?
그래서 순서에 따라 연산 결과가 달라지는데요!
먼저 MEMBER_1 기준 차집합을 구해보고, 그 다음엔 MEMBER_2 기준 차집합을 구해봅시다.
-- 차집합 row-bind 결합
-- EXCEPT (중복X)
SELECT * FROM [MEMBER_1]
EXCEPT
SELECT * FROM [MEMBER_2]
먼저 MEMBER_1 기준 차집합입니다.
MEMBER_1의 데이터 중에서, 겹치는 값이었던 1000006, 1000007 데이터가 사라졌습니다.
SELECT * FROM [MEMBER_2]
EXCEPT
SELECT * FROM [MEMBER_1]
다음은 MEMBER_2 기준 차집합입니다.
MEMBER_2의 데이터 중에서, 겹치는 값이었던 1000006, 1000007 데이터가 사라지고 반환되었습니다.
이렇게 집합 연산자 부분을 마무리합니다. 간단하죠?
그렇다면 궁금한 점이 생깁니다. [MEMBER_1], [MEMBER_2] 는 데이터의 내용만 다를 뿐 컬럼 형식은 똑같았는데요!
그럼 완전히 다른 데이터셋에 대해서도 이를 묶어서 보여줄 수 있을까요?
-> 정답을 얘기하자면, 동일한 컬럼값이 있어야 가능합니다.
만일 예를들어 컬럼이 완전 다른 [MEMBER_1] 과 [ORDER] 테이블을 UNION ALL 해볼까요?
SELECT * FROM [MEMBER_2]
UNION ALL
SELECT * FROM [ORDER]
"UNION, INTERSECT 또는 EXCEPT 연산자를 사용하여 결합된 모든 쿼리의 대상 목록에는 동일한 개수의 식이 있어야 합니다. " 라는 에러가 뜹니다.
그래서 컬럼(열)만 일정하게 맞춰준다면, 자유자재로 합집합 / 교집합 / 차집합 연산을 할 수 있습니다.
'Skillset > SQL' 카테고리의 다른 글
SQL CASE WHEN 구문 사용법 - 예제로 알아보기 (0) | 2022.06.07 |
---|---|
SQL 효율화 및 자동화 명령어 - VIEW & PROCEDURE (2) | 2022.06.04 |
SQL 윈도우 함수 예제 - 순위함수(RANK), 누적 집계함수 (0) | 2022.06.02 |
SQL 그룹함수 예제 - WITH ROLLUP, WITH CUBE, GROUPING SETS, GROUPING (0) | 2022.05.31 |
SQL 자주 사용하는 집계함수 예제로 알아보기 (0) | 2022.05.31 |