SQL UNION演算子
SQL UNION 演算子は、2つ以上の SELECT ステートメントの結果を結合します。
UNION 演算子は、2つ以上の SELECT ステートメントの結果セットを結合するために使用されます。複数のテーブルからデータを選択し、結果セットを1つの結果セットに組み合わせることができます。UNION を使用する場合、各 SELECT ステートメントは同じ数の列を持ち、対応する列のデータ型が類似している必要があります。
SQL UNION 構文
SELECT column1, column2, ... FROM table1 UNION SELECT column1, column2, ... FROM table2;
UNION 演算子はデフォルトで重複レコードを除去します。すべての重複レコードを保持する必要がある場合は、UNION ALL 演算子を使用できます。

SQL UNION ALL 構文
SELECT column1, column2, ... FROM table1 UNION ALL SELECT column1, column2, ... FROM table2;

注記:UNION の結果セット内の列名は、常に UNION 内の最初の SELECT ステートメントの列名と等しくなります。
デモデータベース
このチュートリアルでは、サンプル サンプルデータベースを使用します。
以下は「Websites」テーブルから選択されたデータです:
mysql> SELECT * FROM Websites; +----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | サンプル | http://www.example.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+
以下は「apps」APP のデータです:
mysql> SELECT * FROM apps; +----+------------+-------------------------+---------+ | id | app_name | url | country | +----+------------+-------------------------+---------+ | 1 | QQ APP | http://im.qq.com/ | CN | | 2 | 微博 APP | http://weibo.com/ | CN | | 3 | 淘宝 APP | https://www.taobao.com/ | CN | +----+------------+-------------------------+---------+ 3 rows in set (0.00 sec)
SQL UNION の例
次の SQL ステートメントは、「Websites」テーブルと「apps」テーブルからすべての異なるcountry(異なる値のみ):
例
UNION
SELECT country FROM apps
ORDER BY country;
上記の SQL を実行すると、出力結果は次のようになります:
注記:UNION は、2つのテーブルのすべての country を一覧表示するためには使用できません。一部のウェブサイトと APP が同じ国からのものである場合、各国は一度だけリストされます。UNION は異なる値のみを選択します。重複した値を選択するには UNION ALL を使用してください!
SQL UNION ALL の例
次の SQL ステートメントは、UNION ALL を使用して「Websites」テーブルと「apps」テーブルからすべてのcountry(重複した値も含む):
例
UNION ALL
SELECT country FROM apps
ORDER BY country;
上記の SQL を実行すると、出力結果は次のようになります:
WHERE 句を伴う SQL UNION ALL
次の SQL ステートメントは、UNION ALL を使用して「Websites」テーブルと「apps」テーブルからすべての中国 (CN) のデータ(重複した値も含む):
例
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;
上記の SQL を実行すると、出力結果は次のようになります: