코딩 스쿨 SQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

SQL Union

SQL UNION: 여러 SELECT 쿼리의 결과를 결합

SQL UNION 연산자는 두 개 이상의 SELECT 쿼리의 결과를 하나로 결합할 때 사용됩니다. UNION은 각 SELECT 쿼리의 결과에서 중복된 행을 제거하고, 모든 고유한 행을 반환합니다. 각 SELECT 쿼리는 같은 수의 열을 가져야 하며, 데이터 유형이 일치해야 합니다.

1. 기본 UNION 문법

SELECT 열이름1, 열이름2, ...
FROM 테이블1
UNION
SELECT 열이름1, 열이름2, ...
FROM 테이블2;

  • 각 SELECT 쿼리는 동일한 열 수와 데이터 유형을 가져야 합니다.
  • 기본적으로 UNION은 중복된 행을 제거합니다. 중복된 행을 포함하고 싶다면 UNION ALL을 사용해야 합니다.

2. SQL UNION 예제

2.1 기본 UNION

다음은 employees_2023employees_2024 테이블에서 2023년과 2024년의 직원 정보를 결합하는 예제입니다.

SELECT name, department
FROM employees_2023
UNION
SELECT name, department
FROM employees_2024;

이 쿼리는 두 테이블에서 중복된 직원을 제거하고 고유한 직원 목록을 반환합니다.

결과 예시:

name department
John Sales
Jane HR
Alice Engineering

3. UNION ALL: 중복된 행을 포함하여 결합

UNION ALL 연산자는 중복된 행을 제거하지 않고, 모든 행을 포함하여 결과를 결합합니다. 이를 통해 중복된 데이터도 결과에 포함됩니다.

예제: 중복된 행을 포함하여 결합

SELECT name, department
FROM employees_2023
UNION ALL
SELECT name, department
FROM employees_2024;

이 쿼리는 중복된 행을 포함한 전체 직원 목록을 반환합니다.

결과 예시:

name department
John Sales
Jane HR
Alice Engineering
John Sales

4. UNION과 WHERE 절 사용

WHERE 절을 사용하여 각 SELECT 쿼리에서 조건을 설정할 수 있습니다. 이를 통해 특정 조건을 만족하는 데이터를 결합할 수 있습니다.

예제: 2023년 직원 중 Sales 부서와 2024년 직원 중 HR 부서만 결합

SELECT name, department
FROM employees_2023
WHERE department = 'Sales'
UNION
SELECT name, department
FROM employees_2024
WHERE department = 'HR';

이 쿼리는 2023년의 Sales 부서 직원과 2024년의 HR 부서 직원을 결합합니다.

결과 예시:

name department
John Sales
Jane HR

5. UNION과 ORDER BY 사용

UNION으로 결합된 결과에 ORDER BY를 적용하여 데이터를 정렬할 수 있습니다. ORDER BY는 전체 UNION 결과에 적용되며, 개별 SELECT 쿼리에서 사용되지 않습니다.

예제: 직원 이름을 오름차순으로 정렬

SELECT name, department
FROM employees_2023
UNION
SELECT name, department
FROM employees_2024
ORDER BY name ASC;

이 쿼리는 결합된 결과를 이름 순으로 오름차순 정렬하여 반환합니다.

결과 예시:

name department
Alice Engineering
Jane HR
John Sales

6. UNION과 서로 다른 데이터 집합 결합

UNION은 서로 다른 테이블에서 같은 의미를 가지는 데이터를 결합할 때 매우 유용합니다. 예를 들어, 여러 연도 또는 여러 지점의 데이터를 하나로 결합할 수 있습니다.

예제: 여러 지점의 판매 데이터를 결합

SELECT product_name, sales_amount
FROM sales_north
UNION
SELECT product_name, sales_amount
FROM sales_south;

이 쿼리는 북부와 남부 지점에서 판매된 제품과 판매 금액을 결합하여 반환합니다.

결과 예시:

product_name sales_amount
Laptop 1500
Phone 800
Tablet 600

7. UNION의 제약 사항

  • 열 개수와 데이터 유형 일치: 각 SELECT 쿼리의 열 개수는 동일해야 하며, 대응되는 열의 데이터 유형도 일치해야 합니다.
  • 정렬 기준 제한: ORDER BY는 전체 UNION 결과에만 적용되며, 개별 SELECT 쿼리에는 사용할 수 없습니다.
  • UNION 성능: UNION은 중복 제거를 위해 추가적인 처리를 수행하기 때문에, UNION ALL보다 성능이 느릴 수 있습니다. 중복된 데이터를 포함해도 된다면 UNION ALL을 사용하는 것이 더 효율적입니다.

8. 실전 예제

예제 1: 2023년과 2024년의 부서별 직원 수 결합

SELECT department, COUNT(*) AS employee_count
FROM employees_2023
GROUP BY department
UNION
SELECT department, COUNT(*) AS employee_count
FROM employees_2024
GROUP BY department;

이 쿼리는 2023년과 2024년의 부서별 직원 수를 결합하여 반환합니다.

예제 2: 2023년과 2024년의 전체 직원 목록 정렬

SELECT name, department
FROM employees_2023
UNION
SELECT name, department
FROM employees_2024
ORDER BY name ASC;

이 쿼리는 2023년과 2024년의 전체 직원 목록이름 순으로 정렬하여 반환합니다.

예제 3: 중복을 포함한 여러 연도의 직원 결합

SELECT name, department
FROM employees_2023
UNION ALL
SELECT name, department
FROM employees_2024;

이 쿼리는 중복된 직원을 포함한 2023년과 2024년 직원 목록을 반환합니다.

9. UNION과 JOIN의 차이

  • UNION: 여러 SELECT 쿼리의 결과를 수직으로 결합하여 하나의 결과 집합을 만듭니다. 각 쿼리의 결과는 으로 결합됩니다.
  • JOIN: 여러 테이블의 데이터를 특정 조건을 기준으로 수평으로 결합하여 하나의 결과 집합을 만듭니다. 각 테이블의 데이터는 로 결합됩니다.

10. 요약

  • SQL UNION은 여러 SELECT 쿼리의 결과를 결합하여 고유한 행만을 반환합니다.
  • UNION ALL은 중복된 행을 포함하여 결합합니다.
  • 모든 SELECT 쿼리는 동일한 열 수데이터 유형을 가져야 합니다.
  • ORDER BY는 전체 UNION 결과에만 적용됩니다.
  • WHERE 절과 함께 사용하여 각 SELECT 쿼리에 조건을 설정할 수 있습니다.

SQL UNION 연산자는 여러 데이터 집합을 결합하여 분석하거나 보고서를 작성할 때 유용한 도구로, 다양한 데이터베이스 시스템에서 자주 사용됩니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com