SQL - UNION vs UNION ALL

안녕하세요, SQL 열정가 여러분! 오늘 우리는 SQL의 세계로 흥미로운 여행을 떠나게 될 것입니다. 특히 두 가지 강력한 연산자에 중점을 두겠습니다: UNION과 UNION ALL. 여러분의 친절한 이웃 컴퓨터 선생님이자 오랜 경험을 가진 저는 이 개념들을 명확하게, 유머 있게, 그리고 많은 실 세계 예제를 통해 안내해 드리겠습니다. 그麼, 시작해 보겠습니다!

SQL - UNION vs UNION ALL

UNION은 무엇인가요?

정의와 기본 개념

UNION은 마치 마스터 셰프가 다른 레시피의 재료를 혼합하여 독특한 요리를 만드는 것과 같습니다. SQL 용어로는, UNION은 두 개 이상의 SELECT 문의 결과 집을 하나의 결과 집으로 결합할 수 있는 연산자입니다.

기본 문법은 다음과 같습니다:

SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;

UNION의 주요 특징

  1. 고유한 결과: UNION은 자동으로 최종 결과 집에서 중복 행을 제거합니다.
  2. 열 호환성: SELECT 문들은 같은 수의 열을 가져야 하며, 이 열들은 호환 가능한 데이터 유형을 가져야 합니다.
  3. 열의 순서: SELECT 문들의 열 순서는 중요합니다. 그들은 위치에 따라 결합됩니다.

UNION의 활용

우리는 두 개의 테이블: fruitsvegetables을 상상해 봅시다. 우리는 모든 농산물 항목의 결합된 목록을 만들고 싶습니다.

-- fruits 테이블
CREATE TABLE fruits (
id INT,
name VARCHAR(50),
color VARCHAR(20)
);

INSERT INTO fruits VALUES
(1, 'Apple', 'Red'),
(2, 'Banana', 'Yellow'),
(3, 'Orange', 'Orange');

-- vegetables 테이블
CREATE TABLE vegetables (
id INT,
name VARCHAR(50),
color VARCHAR(20)
);

INSERT INTO vegetables VALUES
(1, 'Carrot', 'Orange'),
(2, 'Broccoli', 'Green'),
(3, 'Tomato', 'Red');

-- UNION 쿼리
SELECT name, color FROM fruits
UNION
SELECT name, color FROM vegetables;

이 쿼리는 다음과 같은 결과를 줄 것입니다:

name color
Apple Red
Banana Yellow
Orange Orange
Carrot Orange
Broccoli Green
Tomato Red

보시면 우리는 'Orange' 항목이 두 개의 테이블 모두에 나타나지만, 하나의 항목만 나타납니다. 이것이 UNION의 마법입니다 - 중복을 제거합니다!

UNION ALL은 무엇인가요?

정의와 기본 개념

이제 UNION의 열정적인 사촌, UNION ALL을 만나보겠습니다. UNION은 중복 재료를 제거하는 신중한 셰프라면, UNION ALL은 "越多越好!"하는 셰프입니다.

문법은 UNION과 유사합니다:

SELECT column1, column2, ... FROM table1
UNION ALL
SELECT column1, column2, ... FROM table2;

UNION ALL의 주요 특징

  1. 중복 유지: UNION ALL은 모든 행을 포함합니다.
  2. 성능 향상: 중복을 제거할 필요가 없기 때문에, UNION ALL은 일반적으로 UNION보다 빠릅니다.
  3. 열 호환성: UNION과 마찬가지로, 같은 수의 열과 호환 가능한 데이터 유형을 가져야 합니다.

UNION ALL의 활용

우리는 다시 fruitsvegetables 테이블을 사용해 보겠습니다:

SELECT name, color FROM fruits
UNION ALL
SELECT name, color FROM vegetables;

이 쿼리는 다음과 같은 결과를 생산합니다:

name color
Apple Red
Banana Yellow
Orange Orange
Carrot Orange
Broccoli Green
Tomato Red

이제 우리는 두 개의 'Orange' 항목을 가지고 있습니다 - 하나는 과일에서, 다른 하나는 채소에서 왔습니다. UNION ALL은 모든 행을 유지합니다!

UNION vs UNION ALL: 양자 간 비교

정말로 이해하기 위해, 우리는 그들을 옆에 놓고 비교해 보겠습니다:

특징 UNION UNION ALL
중복 처리 중복 제거 모든 중복 포함
성능 더 느리게 (중복 제거로 인해) 더 빠르게
결과 집 크기 가능성이 적음 가능성이 큼
사용 사례 고유한 결과 필요할 때 모든 결과 필요할 때

UNION 사용 시

UNION을 사용할 때는 다음과 같은 경우에 적합합니다:

  1. 다른 지역의 고객 목록을 결합할 때, 중복이 없도록 하고 싶을 때.
  2. 다른 공급업체의 제품 카달로그를 병합할 때, 중복 항목을 제거하고 싶을 때.

UNION ALL 사용 시

UNION ALL을 선택할 때는 다음과 같은 경우에 적합합니다:

  1. 데이터 셋에 중복이 없을 때.
  2. 모든 행을 포함하고 싶을 때.
  3. 성능이 중요하고, 대량의 데이터를 다룰 때.

실제 예제

우리는 몇 가지 실 세계 시나리오로 이해를 더욱 확고히 하겠습니다.

예제 1: 직원 디렉토리

우리는 두 개의 테이블: current_employeesformer_employees를 상상해 봅시다. 우리는 종합 디렉토리를 만들고 싶습니다.

-- 테이블 생성 및 데이터 입력
CREATE TABLE current_employees (id INT, name VARCHAR(50), department VARCHAR(50));
CREATE TABLE former_employees (id INT, name VARCHAR(50), department VARCHAR(50));

INSERT INTO current_employees VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'IT'),
(3, 'Charlie', 'Finance');

INSERT INTO former_employees VALUES
(4, 'David', 'Marketing'),
(5, 'Eve', 'IT'),
(2, 'Bob', 'IT');  -- Bob은 이전에 여기 일했고, 나갔다가 다시 돌아왔습니다

-- UNION 쿼리
SELECT name, department FROM current_employees
UNION
SELECT name, department FROM former_employees;

-- UNION ALL 쿼리
SELECT name, department FROM current_employees
UNION ALL
SELECT name, department FROM former_employees;

UNION 쿼리는 Bob을 한 번만 보여주지만, UNION ALL 쿼리는 Bob을 두 번 보여줍니다.

예제 2: 판매 보고서

이제 우리는 온라인과 오프라인 판매를 결합한 판매 보고서를 만들어 보겠습니다.

-- 테이블 생성 및 데이터 입력
CREATE TABLE online_sales (product VARCHAR(50), amount DECIMAL(10,2));
CREATE TABLE store_sales (product VARCHAR(50), amount DECIMAL(10,2));

INSERT INTO online_sales VALUES
('Laptop', 1200.00),
('Phone', 800.00),
('Tablet', 500.00);

INSERT INTO store_sales VALUES
('Laptop', 1100.00),
('Phone', 750.00),
('Headphones', 200.00);

-- 고유한 제품 판매 목록 (UNION)
SELECT product FROM online_sales
UNION
SELECT product FROM store_sales;

-- 모든 판매 기록 (UNION ALL)
SELECT 'Online' AS source, product, amount FROM online_sales
UNION ALL
SELECT 'Store' AS source, product, amount FROM store_sales;

UNION 쿼리는 두 채널 모두에서 판매된 고유한 제품 목록을 제공하지만, UNION ALL 쿼리는 모든 판매 거래를 제공합니다.

결론

그렇게 우리는 UNION과 UNION ALL의 세계로 흥미로운 여행을 마치게 되었습니다. 우리는 그들의 유사성, 차이점, 그리고 실 세계 응용을 탐구했습니다. 기억하시길, UNION은 고유한 결과를 얻을 때 사용하시고, UNION ALL은 모든 데이터를 포함하고 싶을 때 사용하세요.

SQL 여정을 계속하면서, 이 강력한 도구들을 사용할 기회가 많이 올 것입니다. 요리와 마찬가지로, 각 재료(또는 연산자)를 언제 사용해야 하는지 알아야 합니다.

지속적으로 연습하고, 호기심을 가지고, 이 개념들을 실험해 보세요. 언제쯤에는 UNION하고 UNION ALL하는 것을 프로처럼 할 수 있을 것입니다! 즐거운 쿼리 작성을 기원합니다!

Credits: Image by storyset