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(異なる値のみ):

例

SELECT country FROM Websites
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(重複した値も含む):

例

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;

上記の SQL を実行すると、出力結果は次のようになります:



WHERE 句を伴う SQL UNION ALL

次の SQL ステートメントは、UNION ALL を使用して「Websites」テーブルと「apps」テーブルからすべての中国 (CN) のデータ(重複した値も含む):

例

SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;

上記の SQL を実行すると、出力結果は次のようになります:

その他の拡張