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

SQL UNION 演算子

このチュートリアルでは、2つまたは複数のSQLクエリの結果を組み合わせる方法を学びます。

UNION演算子

UNION演算子は、2つまたは複数のSELECTクエリの結果を1つの結果セットに統合するために使用されます。UNION演算子は、2つのテーブルの列を結合する結合とは異なります。UNION演算子は、2つのソーステーブルのすべての行を1つの結果テーブルに配置し、新しいテーブルを作成します。

以下は、UNIONを使用して2つの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;