English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、2つまたは複数のSQLクエリの結果を組み合わせる方法を学びます。
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;