扫码一下
查看教程更方便
本教程为大家介绍 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];
下面我们通过例子来介绍 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. |
------------------- ---------- ------------------------