English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL UNION 연산자

이 튜토리얼에서는 두 개나 그 이상의 SQL 쿼리의 결과를 결합하는 방법을 배웁니다.

UNION 연산자

UNION 연산자는 두 개나 그 이상의 SELECT 쿼리의 결과를 하나의 결과 집합에 결합하는 데 사용됩니다. UNION 연산자는 두 테이블의 열을 결합하는 조인과는 다릅니다. UNION 연산자는 두 원본 테이블의 모든 행을 하나의 결과 테이블에 배치하여 새 테이블을 생성합니다.

아래는 UNION으로 두 SELECT 쿼리의 결과 집합을 결합하는 기본 규칙입니다:

  • 모든 쿼리에서 열의 수와 순서는 같아야 합니다。

  • 대응하는 열의 데이터 타입은 호환되어야 합니다。

이 조건을 만족하면 이 테이블들은 결합 호환됩니다(union-compatible):

문법

UNION의 기본 문법:

SELECT column_list FROM table1_name
   UNION SELECT column_list FROM table2_name;

합병 연산을 더 잘 이해하기 위해, employees와 customers 테이블에 first_name과 last_name와 같은 가정된 필드가 존재한다고 가정해 보겠습니다. 주의하시오, 이 필드는 실제로 우리의 데모 데이터베이스 테이블에 존재하지 않습니다.

+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
|  1 | Ethan | Hunt |   5000 |
|  2 | Tony | Montana |   6500 |
|  3 | Sarah | Connor |   8000 |
|  4 | Rick | Deckard |   7200 |
|  5 | Martin | Blank |   5600 |
+----+------------+-----------+--------+

+----+------------+-----------+----------+
| id | first_name | last_name | city |
+----+------------+-----------+----------+
|  1 | Maria | Anders | Berlin |
|  2 | Fran | Wilson | Madrid |
|  3 | Dominique | Perrier | Paris |
|  4 | Martin | Blank | Turin |
|  5 | Thomas | Hardy | Portland |
+----+------------+-----------+----------+
테이블: employees
테이블: customers

두 쿼리 결과를 병합하기 위해 합병 연산을 실행하겠습니다.

다음 문장은 모든 고객과 직원의 이름과 성을 반환합니다:

SELECT first_name, last_name FROM employees 
UNION
SELECT first_name, last_name FROM customers;

위 명령어 실행 후, 결과 집합은 다음과 같이 보일 것입니다:

+---------------+--------------+
| first_name | last_name |
+---------------+--------------+
| Ethan | Hunt |
| Tony | Montana |
| Sarah | Connor |
| Rick | Deckard |
| Martin | Blank |
| Maria | Anders |
| Fran          | Wilson       |
| Dominique     | Perrier      |
| Thomas        | Hardy        |
+---------------+--------------+

기본적으로 UNION 연산자는 결합된 결과 집합에서 중복된 행을 제거합니다. 이로 인해 위의 쿼리는 다음과 같이 반환됩니다:9행,如果您注意到名称“Martin Blank”同时出现在employees和customers表中。

그러나, 중복된 행을 유지하려면 ALL 키워드를 사용할 수 있습니다. 예를 들어:

SELECT first_name, last_name FROM employees 
UNION ALL
SELECT first_name, last_name FROM customers;