Mysql-union-keyword

提供:Dev Guides
移動先:案内検索

MySQL-UNIONキーワード

複数のテーブルから1行ずつ、または単一のテーブルから複数の行セットをすべて単一の結果セットとして選択する場合は、 UNION を使用できます。

UNIONはMySQL 4.0以降で利用可能です。 このセクションでは、その使用方法を説明します。

見込み客と実際の顧客をリストする2つのテーブルがあり、3つ目はサプライ品を購入するベンダーをリストし、3つのテーブルすべての名前とアドレスをマージして単一のメーリングリストを作成するとします。 UNIONはこれを行う方法を提供します。 3つのテーブルが次の内容を持っていると仮定します-

mysql> SELECT *FROM prospect;
+---------+-------+------------------------+
|  fname  | lname |          addr          |
+---------+-------+------------------------+
| Peter   | Jones | 482 Rush St., Apt. 402 |
| Bernice | Smith |     916 Maple Dr.      |
+---------+-------+------------------------+
mysql> SELECT* FROM customer;
+-----------+------------+---------------------+
| last_name | first_name |       address       |
+-----------+------------+---------------------+
| Peterson  |   Grace    | 16055 Seminole Ave. |
|   Smith   |  Bernice   |    916 Maple Dr.    |
|   Brown   |   Walter   |    8602 1st St.     |
+-----------+------------+---------------------+
mysql> SELECT * FROM vendor;
+-------------------+---------------------+
|      company      |        street       |
+-------------------+---------------------+
| ReddyParts, Inc.  | 38 Industrial Blvd. |
| Parts-to-go, Ltd. | 213B Commerce Park. |
+-------------------+---------------------+

3つのテーブルすべてが異なる列名を持っているかどうかは関係ありません。 次のクエリは、3つのテーブルから名前とアドレスを一度に選択する方法を示しています-

mysql> SELECT fname, lname, addr FROM prospect
-> UNION
-> SELECT first_name, last_name, address FROM customer
-> UNION
-> SELECT company, '', street FROM vendor;
+-------------------+----------+------------------------+
|       fname       |   lname  |          addr          |
+-------------------+----------+------------------------+
|       Peter       |   Jones  | 482 Rush St., Apt. 402 |
|      Bernice      |   Smith  |     916 Maple Dr.      |
|       Grace       | Peterson |   16055 Seminole Ave.  |
|      Walter       |   Brown  |     8602 1st St.       |
| ReddyParts, Inc.  |          |   38 Industrial Blvd.  |
| Parts-to-go, Ltd. |          |   213B Commerce Park.  |
+-------------------+----------+------------------------+

重複を含むすべてのレコードを選択する場合は、最初のUNIONキーワードの後に​​ALLを付けてください-

mysql> SELECT fname, lname, addr FROM prospect
-> UNION ALL
-> SELECT first_name, last_name, address FROM customer
-> UNION
-> SELECT company, '', street FROM vendor;
+-------------------+----------+------------------------+
|       fname       |   lname  |          addr          |
+-------------------+----------+------------------------+
|       Peter       |   Jones  | 482 Rush St., Apt. 402 |
|      Bernice      |   Smith  |     916 Maple Dr.      |
|       Grace       | Peterson |   16055 Seminole Ave.  |
|      Bernice      |   Smith  |     916 Maple Dr.      |
|      Walter       |   Brown  |     8602 1st St.       |
| ReddyParts, Inc.  |          |   38 Industrial Blvd.  |
| Parts-to-go, Ltd. |          |   213B Commerce Park.  |
+-------------------+----------+------------------------+