SQL Advanced: 집합 연산자

하하호호훈이·2025년 5월 30일

SQL(MySQL) MUST KNOW

목록 보기
15/23
post-thumbnail

이번 포스팅에서는 SQL에서 SELECT 결과들을 합치거나 비교할 때 사용하는 집합 연산자(Set Operators) 에 대해 알아보겠습니다. 서로 다른 SELECT 결과를 하나로 통합하거나 교집합·차집합을 계산할 때 매우 유용해요!

다루는 연산자:

  • UNION
  • UNION ALL
  • INTERSECT
  • EXCEPT

💡 모든 예시는 company_dbemployeesprojects 테이블 기반입니다.


🏗️ 예시 데이터

-- employees 테이블
emp_id | first_name | department
-------|------------|------------
1      | Alice      | Engineering
2      | Bob        | Marketing
3      | Charlie    | Engineering
4      | Diana      | HR

-- projects 테이블
project_id | emp_id | project_name
-----------|--------|--------------
101        | 1      | AI Platform
102        | 2      | Rebranding
103        | 1      | Data Lake
104        | 3      | Automation

1. UNION — 결과 합치기 (중복 제거)

두 SELECT 문의 결과를 합칩니다. 동일한 레코드는 1개만 남깁니다.

SELECT emp_id FROM employees
UNION
SELECT emp_id FROM projects;

예시 결과:

emp_id
1
2
3
4

2. UNION ALL — 결과 합치기 (중복 포함)

중복된 행도 모두 포함하여 결과를 합칩니다.

SELECT emp_id FROM employees
UNION ALL
SELECT emp_id FROM projects;

예시 결과:

emp_id
1
2
3
4
1
2
1
3

3. INTERSECT — 교집합

양쪽 SELECT 결과에 모두 존재하는 값만 반환합니다.

SELECT emp_id FROM employees
INTERSECT
SELECT emp_id FROM projects;

예시 결과:

emp_id
1
2
3

⚠️ MySQL에는 있지만 다른 DB에서는 지원을 하지 않을 수 있습니다.


4. EXCEPT — 차집합 (왼쪽에는 있고, 오른쪽에는 없는 것)

SELECT emp_id FROM employees
EXCEPT
SELECT emp_id FROM projects;

예시 결과:

emp_id
4

⚠️ MySQL은 EXCEPT도 지원하지 않음 → NOT IN, LEFT JOIN ... WHERE IS NULL로 대체 가능


다음 파트에서는 데이터 일관성과 복구 가능성을 보장하는 트랜잭션 (Transaction) 기능을 다뤄보겠습니다! 그럼 안뇽 👋

profile
AI, Data Science/Analysis 리뷰용가리지용 😆

0개의 댓글