教程 > MySQL 教程 > MySQL 教程 阅读:21

MySQL UNION 操作符

本教程为大家介绍 MySQL UNION 操作符的语法和实例。

描述

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

语法

MySQL UNION 操作符语法格式:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

参数

  • expression1, expression2, ... expression_n: 要检索的列。
  • tables: 要检索的数据表。
  • WHERE conditions: 可选, 检索条件。
  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
  • ALL: 可选,返回所有结果集,包含重复数据。

示例

下面我们通过例子来介绍 UNION 的使用。

我们现在有两个表列出了prospect(潜在客户)和customer(实际客户),还有第三个表列出了您向其购买用品的供应商 vendor。现在希望通过合并所有三个表中的姓名和地址来创建一个邮件列表。UNION 提供了一种方法来做到这一点。三个表具有以下内容

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. |
+-------------------+---------------------+

三个表是否具有不同的列名都没有关系。以下查询说明了如何一次从三个表中选择名称和地址

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.  |
+-------------------+----------+------------------------+

如果要选择所有记录,包括重复记录,请使用 ALL 跟随在第一个 UNION 关键字的后面

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.  |
+-------------------+----------+------------------------+

查看笔记

扫码一下
查看教程更方便