MySQL - UNION 연산자

안녕하세요, 미래의 데이터 마법사 여러분! 오늘 우리는 MySQL의 가장 강력한 도구 중 하나를 탐구해볼 것입니다: UNION 연산자. 이 것은 여러 SELECT 문의 결과를 단일 결과 집합으로 결합할 수 있게 해주는 마법의 지팡이와 같습니다. 흥미롭지 않나요? 함께 이 모험을 떠나보겠습니다!

MySQL - UNION Operator

MySQL UNION 연산자

UNION 연산자는 두 개 이상의 SELECT 문의 결과 집합을 결합하는 데 사용됩니다. 여러 다른 친구 그룹을 같은 파티에 초대하는 것처럼, 모두가 한 자리에 모이는 것입니다!

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

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

실제 예제를 보겠습니다. 두 개의 테이블 'employees'와 'customers'를 가정해봅시다.

-- employees 테이블 생성
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);

-- 데이터 추가
INSERT INTO employees VALUES
(1, 'John Doe', '[email protected]'),
(2, 'Jane Smith', '[email protected]');

-- customers 테이블 생성
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);

-- 데이터 추가
INSERT INTO customers VALUES
(1, 'Alice Johnson', '[email protected]'),
(2, 'Bob Wilson', '[email protected]');

-- UNION 사용
SELECT name, email FROM employees
UNION
SELECT name, email FROM customers;

이 쿼리는 두 테이블의 이름과 이메일을 결합된 목록으로 제공합니다. 멋지지 않나요?

UNION은 기본적으로 중복된 행을 제거합니다. 파티에서 중복된 사람이 두 번 들어오지 못하게 하는 보안관처럼!

WHERE 절과 함께하는 UNION

우리는 WHERE 절을 추가하여 UNION을 더욱 강력하게 만들 수 있습니다. 이렇게 하면 각 SELECT 문의 결과를 결합하기 전에 필터링할 수 있습니다.

SELECT name, email FROM employees WHERE id > 1
UNION
SELECT name, email FROM customers WHERE name LIKE 'B%';

이 쿼리는 ID가 1보다 큰 직원들과 이름이 'B'로 시작하는 고객들만을 제공합니다. 파티에 VIP 섹션을 마련하는 것과 같습니다!

ORDER BY 절과 함께하는 UNION

결합된 결과를 정렬하고 싶다면? 문제ありません! ORDER BY를 UNION과 함께 사용할 수 있지만, 전체 UNION 문의 끝에 와야 합니다.

SELECT name, email FROM employees
UNION
SELECT name, email FROM customers
ORDER BY name ASC;

이렇게 하면 모든 이름과 이메일을 이름의 알파벳 순으로 정렬합니다. 파티 손님들을 알파벳 순으로 정렬하는 것과 같습니다!

별칭을 사용하는 UNION

때로는 테이블의 열 이름이 다를 수 있습니다. 걱정하지 마세요! 별칭을 사용하여 이름을 일치시킬 수 있습니다.

SELECT name, email AS contact FROM employees
UNION
SELECT customer_name, customer_email AS contact FROM customers;

이 예제에서는 고객 테이블의 열 이름이 약간 다르다고 가정합니다. AS 키워드를 사용하여 즉시 이름을 변경할 수 있습니다!

UNION ALL 연산자

우리의 보안관이 중복된 사람을 제거하는 것을 기억하시나요? 때로는 모든 사람을, 중복 여부와 상관없이 받아들이고 싶을 수 있습니다. 그때는 UNION ALL을 사용합니다.

SELECT name FROM employees
UNION ALL
SELECT name FROM customers;

이렇게 하면 모든 이름을, 두 테이블 간의 중복 여부와 상관없이 제공합니다. 파티에 "모두 환영" 정책을 시행하는 것과 같습니다!

클라이언트 프로그램에서 UNION 연산자 사용

이제 UNION 연산자를 클라이언트 프로그램에서 어떻게 사용할 수 있는지 보겠습니다. Python과 mysql-connector 라이브러리를 사용한 예제를 보여드리겠습니다.

import mysql.connector

# 데이터베이스에 연결
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# UNION 쿼리 실행
query = """
SELECT name, email FROM employees
UNION
SELECT name, email FROM customers
ORDER BY name
"""
cursor.execute(query)

# 결과 가져오기 및 출력
for (name, email) in cursor:
print(f"{name}: {email}")

# 연결 닫기
cursor.close()
cnx.close()

이 스크립트는 MySQL 데이터베이스에 연결하고 UNION 쿼리를 실행한 후 결과를 출력합니다. 파티 손님 목록을 관리하는 개인 비서와 같습니다!

다음 표는 우리가 논의한 UNION 방법의 요약입니다:

방법 설명
UNION 결과 결합, 중복 제거
UNION ALL 결과 결합, 중복 유지
WHERE 절과 함께하는 UNION 결합 전에 필터링
ORDER BY 절과 함께하는 UNION 결합된 결과 정렬
별칭을 사용하는 UNION 열 이름 일치

그렇다면, 내 젊은 데이터 열정가 여러분! 우리는 UNION 연산자의 땅을 거쳐 필터링과 정렬에 이르는 복잡한 쿼리까지 탐구했습니다. 연습이 완벽을 만들어 준다는 것을 기억하며, 자신의 데이터베이스에서 이 쿼리를 실험해보세요. 누가 알겠는가? 당신은 도시에서 가장 멋진 데이터 파티를 열 수 있을지도 모릅니다!

Credits: Image by storyset