본문으로 바로가기

UNION 연산자

category MySQL 2024. 10. 1. 15:31
💡 학습 목표

UNION 연산자에 대한 개념을 이해하자. 
UNION 연산자와 JOIN에 차이점을 이해하자.

 

UNION 연산자는 SQL에서 여러 SELECT 문의 결과를 하나의 결과 집합으로 결합할 때 사용됩니다. 즉, 서로 다른 테이블이나 같은 테이블의 다른 조건에서 검색된 데이터를 하나의 결과로 볼 수 있도록 하기 위해 사용한다.

 

  • 기능: UNION은 두 개 이상의 SELECT 결과를 결합합니다.
  • 조건: 모든 SELECT 문은 동일한 수의 열을 가져야 하며, 열의 데이터 타입이 호환 가능해야 합니다.
  • 중복 제거: 기본적으로 UNION은 중복된 행을 제거합니다.
  • 중복 포함: 중복된 행을 포함하려면 UNION ALL을 사용합니다.

 

사용 예시

SELECT name, email FROM customers
UNION
SELECT name, email FROM suppliers;

-----------------------------------------

SELECT name, email FROM customers
UNION ALL
SELECT name, email FROM suppliers;

 

 

시나리오 코드 1

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

-- students 테이블에 샘플 데이터 삽입
INSERT INTO students (name, email) VALUES ('김철수', 'chulsoo@example.com');
INSERT INTO students (name, email) VALUES ('이영희', 'younghee@example.com');
INSERT INTO students (name, email) VALUES ('박민수', 'minsoo@example.com');

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

-- alumni 테이블에 샘플 데이터 삽입
INSERT INTO alumni (name, email) VALUES ('김철수', 'chulsoo@example.com');
INSERT INTO alumni (name, email) VALUES ('최영수', 'youngsoo@example.com');
INSERT INTO alumni (name, email) VALUES ('이영희', 'younghee@example.com');

select name, email from students
union  
select name, email from alumni;

select name, email from students
union all
select name, email from alumni;

UNION과 JOIN의 차이점

UNION과 JOIN은 모두 MySQL에서 여러 테이블의 데이터를 결합하는 데 사용되지만,

그 사용 목적과 방식이 다릅니다.

 

UNION은 여러 SELECT 문의 결과를 수직으로 결합하여 하나의 결과 집합을 만듭니다.

중복된 행은 기본적으로 제거되며, UNION ALL을 사용하면 중복된 행도 포함됩니다.

JOIN 여러 테이블의 데이터를 공통된 열을 기준으로 수평으로 결합합니다.

다양한 종류의 JOIN이 있으며, 각각 결합 방식이 다릅니다.

시나리오 코드 - 2

-- reservations 테이블 생성
CREATE TABLE reservations (
    id INT AUTO_INCREMENT PRIMARY KEY,
    room_id INT,
    reservation_date DATE,
    guest_name VARCHAR(50)
);

-- rooms 테이블 생성
CREATE TABLE rooms (
    room_id INT AUTO_INCREMENT PRIMARY KEY,
    room_number INT
);

-- reservations 테이블에 샘플 데이터 삽입
INSERT INTO reservations (room_id, reservation_date, guest_name) VALUES (1, '2024-06-01', '김철수');
INSERT INTO reservations (room_id, reservation_date, guest_name) VALUES (2, '2024-06-02', '이영희');
INSERT INTO reservations (room_id, reservation_date, guest_name) VALUES (3, '2024-06-03', '박민수');

-- rooms 테이블에 샘플 데이터 삽입
INSERT INTO rooms (room_number) VALUES (101);
INSERT INTO rooms (room_number) VALUES (102);
INSERT INTO rooms (room_number) VALUES (103);

'MySQL' 카테고리의 다른 글

제 3정규형(Third Normal Form, 3NF)  (2) 2024.10.01
제 2정규화(Second Normal Form, 2NF)  (1) 2024.10.01
제 1정규화(First Normal Form, 1NF)  (2) 2024.10.01
서브 쿼리란  (0) 2024.10.01
쇼핑몰과 카테고리 2단계  (3) 2024.10.01