在本教程中,咱们将学习如何使用MySQL UNION操做符从多个SELECT语句将两个或多个结果集组合成一个结果集。html
MySQL UNION运算符容许您从多个表查询出来的两个或多个结果集组合成一个结果集。 MySQL UNION的语法以下:mysql
SELECT column1,column2 UNION[DISTINCT|ALL] SELECT column1,column2 UNION[DISTINCT|ALL] …
执行上面的 SQL 语句后,获得下面的结果 - 执行上面的 SQL 语句后,获得下面的结果 - 有一些使用UNION运算符须要遵循的规则:sql
默认状况下,UNION运算符从结果集中清除重复行,即便没有明确使用DISTINCT操做符。所以,也就是说UNION子句是UNION DISTINCT的一种快捷方式。spa
若是使用UNION ALL明确地保留重复行,若是有的话它将保留在结果集中。UNION ALL性能比UNION DISTINCT更快。htm
如今使用MySQL UNION 来做一些例子和练习,以帮助咱们更好地理解它。排序
假设咱们想将 customer 表和 employee 表中的数据合并到一个单一的结果集,则能够UNION运算符,下面的查询:教程
SELECT customer_id id, contact_name name FROM studymysql.customer UNION SELECT employee_id id, employee_name name FROM studymysql.employee
执行上面的 SQL 语句后,获得下面的结果 -
get
在上面的例子中,咱们在SELECT语句的每一列使用了列别名。若是咱们不使用列别名输出会是什么?MySQL在第一个SELECT语句使用的列名做为标签输出。
接下来让咱们尝试不使用列的别名合并 customer 和 employee 表信息,以下查询:
(SELECT customer_id,contact_name FROM studymysql.customer) UNION (SELECT employee_id, employee_name FROM studymysql.employee) ORDER BY contact_name,customer_id
结果中有 customerNumber 和 contactLastname 标签,这是第一个SELECT语句中列的名称。
若是想在UNION运算符中对查询返回结果集进行排序,则须要在SQL中最后的那个 SELECT语句使用ORDER BY子句。
让咱们来看看下面的例子:
(SELECT customer_id id, contact_name name FROM studymysql.customer) UNION (SELECT employee_id id, employee_name name FROM studymysql.employee) ORDER BY name,id
执行上面的 SQL 语句后,获得下面的结果 -
在上面的查询中,咱们首先使用 UNION 操做符合并 employee 表和 customer 表的 ID 和 name 到一个结果集。 而后咱们经过使用ORDER BY子句排序结果集。请注意,咱们把SELECT语句放在括号内,并把ORDER BY子句做为最后一个语句。
若是将ORDER BY子句放在每一个SELECT语句中,也不会影响UNION运算符所产生的最终结果行的顺序。
MySQL还提供了另一种方案 - 基于列位置使用ORDER BY子句将结果集进行排序,以下面的查询:
(SELECT customer_id,contact_name FROM studymysql.customer) UNION (SELECT employee_id,employee_name FROM studymysql.employee) ORDER BY 2,1
执行上面的 SQL 语句后,获得下面的结果 -
在本教程中,您已经学会了如何使用MySQL UNION语句从多个表中查询数据并合并成一个结果集。