Union
1. UNION 소개
- 우리는 지금까지
JOIN, 서브쿼리라는 강력한 도구들을 배웠습니다. - 이 기술들의 공통점은 기존 테이블의 정보를 조합하거나 필터링해서, 우리가 원하는 형태의 '하나의 결과 집합(Result Set)'을 만들어내는 것이었습니다.
1.1 JOIN vs UNION
JOIN이 여러 테이블을 옆으로(수평으로) 붙여서 더 많은 정보를 가진 컬럼들을 만드는 기술이었다면,UNION은 여러 개의 결과 집합을 아래로(수직으로) 이어 붙여서 더 많은 행을 가진 하나의 집합으로 만드는 기술입니다.JOIN이 정보를 풍성하게 만드는 기술이라면,UNION은 흩어진 집합들을 하나로 모으는 기술이라고 할 수 있습니다.
1.2 문제 상황
"우리 쇼핑몰은 현재 활동 중인 고객을 users 테이블에, 과거에 탈퇴한 고객을 retired_users라는 별도의 테이블에 보관하고 있다. 연말을 맞아 모든 고객(활동+탈퇴)에게 감사 이메일을 보내기 위해, 두 테이블에 흩어져 있는 이름과 이메일을 합쳐서 하나의 전체 목록을 만들어야 한다."
- 이 업무는
JOIN으로는 해결할 수 없습니다. - 두 테이블은 서로 연결된 관계가 아니라, 구조는 비슷하지만 분리된 별개의 집합이기 때문입니다.
1.3 실습 준비: retired_users 테이블 생성
- 이 문제를 실습하기 위해, 먼저 '탈퇴한 고객' 정보를 담을
retired_users테이블을 임시로 만들어 봅시다. - 일부러 현재 활동 고객인 '션'을 탈퇴 고객 명단에도 포함시켰습니다.
-- 본 실습을 위한 탈퇴 고객 테이블 생성
DROP TABLE IF EXISTS retired_users;
CREATE TABLE retired_users (
id BIGINT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
retired_date DATE NOT NULL
);
-- 탈퇴 고객 데이터 입력
INSERT INTO retired_users (id, name, email, retired_date) VALUES
(1, '션', 'sean@example.com', '2024-12-31'),
(7, '아이작 뉴턴', 'newton@example.com', '2025-01-10');
- '션'은
users테이블에도 포함되고retired_users테이블에도 포함됩니다. - 비즈니스 로직에는 맞지 않지만 개발자의 실수로 두 곳에 모두 입력되었다고 가정합시다.
2. UNION의 개념과 사용법
2.1 두 개의 고객 명단
1. 활동 고객 명단 (users 테이블)
SELECT name, email FROM users;
실행 결과
| name | |
|---|---|
| 션 | sean@example.com |
| 네이트 | nate@example.com |
| 세종대왕 | sejong@example.com |
| 이순신 | sunsin@example.com |
| 마리 퀴리 | marie@example.com |
| 레오나르도 다빈치 | vinci@example.com |
2. 탈퇴 고객 명단 (retired_users 테이블)
SELECT name, email FROM retired_users;
실행 결과
| name | |
|---|---|
| 션 | sean@example.com |
| 아이작 뉴턴 | newton@example.com |
2.2 UNION으로 합치기
UNION연산자는 이 두 개의SELECT문의 결과를 하나로 합쳐줍니다.- 사용법은 아주 간단합니다. 두
SELECT문 사이에UNION키워드를 넣어주기만 하면 됩니다.
SELECT name, email FROM users
UNION
SELECT name, email FROM retired_users;
실행 결과
| name | |
|---|---|
| 션 | sean@example.com |
| 네이트 | nate@example.com |
| 세종대왕 | sejong@example.com |
| 이순신 | sunsin@example.com |
| 마리 퀴리 | marie@example.com |
| 레오나르도 다빈치 | vinci@example.com |
| 아이작 뉴턴 | newton@example.com |
2.3 UNION의 중복 제거 특징
- 결과를 자세히 살펴봅시다.
- '션'은
users테이블에도 있고retired_users테이블에도 있었습니다. - 하지만 최종 결과 목록에는 단 한 번만 나타납니다.
- 이것이
UNION의 특징입니다.UNION은 기본적으로 두 결과 집합을 합친 뒤, 완전히 중복되는 행은 자동으로 제거하여 고유한 값만 남깁니다. - 이메일 목록을 만들 때 중복된 주소로 두 번 발송하는 실수를 원천적으로 방지해주니 매우 유용한 기능입니다.