MySQL UNION 和 UNION all 操作符将两个结果集合并一个表

比如第一个查询有100条两列,第二个查询结果也为160条两列,故使用union all之后,可以将这两个结果合并成一个,变成260行两列。

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: 可选,返回所有结果集,包含重复数据。

演示数据库

在本教程中,我们将使用 RUNOOB 样本数据库。

下面是选自 "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.runoob.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 不能用于列出两个表中所有的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 输出结果如下:

UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)

UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

使用形式如下:

SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称;
SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;

四、我的例子如下:

mysql> select * from product;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    2 |    200 |
|    3 |    300 |
|    4 |    400 |
+------+--------+
4 rows in set (0.00 sec)

mysql> select a.* from product a ;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    2 |    200 |
|    3 |    300 |
|    4 |    400 |
+------+--------+
4 rows in set (0.00 sec)

mysql> select a.id a_id from product a ;
+------+
| a_id |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+
4 rows in set (0.00 sec)

mysql> select a.id as a_id from product a ;
+------+
| a_id |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+
4 rows in set (0.01 sec)

mysql> select a.id as a_id,a.amount a_amout from product a ;
+------+---------+
| a_id | a_amout |
+------+---------+
|    1 |     100 |
|    2 |     200 |
|    3 |     300 |
|    4 |     400 |
+------+---------+
4 rows in set (0.00 sec)

mysql> select a.id as a_id,a.amount a_amout from product a  union select b.id as b_id,b.amount b_amout from product b;
+------+---------+
| a_id | a_amout |
+------+---------+
|    1 |     100 |
|    2 |     200 |
|    3 |     300 |
|    4 |     400 |
+------+---------+
4 rows in set (0.00 sec)

mysql> select a.id as a_id,a.amount a_amout from product a  union all  select b.id as b_id,b.amount b_amout from product b;
+------+---------+
| a_id | a_amout |
+------+---------+
|    1 |     100 |
|    2 |     200 |
|    3 |     300 |
|    4 |     400 |
|    1 |     100 |
|    2 |     200 |
|    3 |     300 |
|    4 |     400 |
+------+---------+
8 rows in set (0.01 sec)

mysql> select a.id as a_id from product a  union all  select concat(b.amount,b.id,'#') from product b;
+-------+
| a_id  |
+-------+
| 1     |
| 2     |
| 3     |
| 4     |
| 1001# |
| 2002# |
| 3003# |
| 4004# |
+-------+
8 rows in set (0.00 sec)

mysql> select a.id as a_id from product a  union all  select concat_ws('#',b.amount,b.id) from product b;
+-------+
| a_id  |
+-------+
| 1     |
| 2     |
| 3     |
| 4     |
| 100#1 |
| 200#2 |
| 300#3 |
| 400#4 |
+-------+
8 rows in set (0.00 sec)

参考:http://www.runoob.com/mysql/mysql-union-operation.html

MySQL UNION 和 UNION all 操作符将两个结果集合并一个表比如第一个查询有100条两列,第二个查询结果也为160条两列,故使用union all之后,可以将这两个结果合并成一个,变成260行两列。描述MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。语法MySQL UNIO... 本教程为大家介绍 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
`MySQL UNION` 操作符用于连接两个以上的 `SELECT` 语句的结果组合到一个结果集合中。多个 `SELECT` 语句会删除重复的数据。 `UNION` 操作符选取不同的值,如果允许得到重复的值,可以使用 `UNION ALL` unionunion all区别
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、unionunion all的区别?二、union/union all 使用order by失败1.拼接两个结果集使用排序失效2.Incorrect usage of UNION and ORDER BY总结 最近有使用到把几张数据库结果集拼起来,用到了union,简要记录一下 一、unionunion all的区别? unionunion all 都可以把多个数据库查询结果集拼接起来,结果集需要需要有相同.
1. sql中 unionunion all 的用法 如果我们需要将两个 select 语句的结果作为一个整体显示出来,我们就需要用到 union 或者 union all 关键字。union (或称为联合)的作用是将多个结果合并在一起显示出来。 unionunion...
要求:求出价格低于2000和价格高于3000的商品,不能用or和not between……and 思路:我们可以先求出低于2000的商品得到结果集1 再求出高于3000的商品得到结果集2 再利用union合并结果集1和结果集2
Mysql关键字之Union AllUnion All关键字说明 Union All关键字说明 mysqlunion all 关键字是连接两个的内容组成一张新,要求两字段个数一直即可。 一:user 使用UNION ALL关键字连接两内容 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。 union 是对数据进行并集操作,不包括重复行,同时进行默认排序 从效率上说
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。 SQL UNION 语法 SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM tab
案例:找出工作岗位是SALESMAN和MANAGER的员工: mysql> select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER'; +--------+----------+ | ename | job | +--------+----------+ | ALLEN | SALESMAN | | WARD | SALESMAN | | JONES | M
MySQL数据库中,UNIONUNION ALL都是用于合并两个或多个SELECT语句的结果集的操作符UNION操作符会将两个或多个SELECT语句的结果集合并成一个结果集,并去除重复的行。例如: SELECT col1 FROM table1 UNION SELECT col1 FROM table2; 这个语句会将table1和table2中col1列的值合并一个结果集,并去除重复的行。 UNION ALL操作符也会将两个或多个SELECT语句的结果集合并成一个结果集,但不会去除重复的行。例如: SELECT col1 FROM table1 UNION ALL SELECT col1 FROM table2; 这个语句会将table1和table2中col1列的值合并一个结果集,包括重复的行。 总之,UNIONUNION ALL都是用于合并结果集的操作符,但UNION会去除重复的行,而UNION ALL不会。