小言_互联网的博客

MySQL中UNION与UNION ALL的区别

300人阅读  评论(0)

一、UNION 操作符

UNION 操作符合并两个或多个 SELECT 语句的结果组合成单个结果集。

注意:UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

二、语法

SQL UNION 语法

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

注意:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

注意:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

三、样例演示

准备了两张表,分别是 suppliers 与 suppliers_copy

suppliers 的数据如下:

mysql> select * from suppliers;
+------+----------+
| s_id | s_name   |
+------+----------+
| 101  | 天虹         |
| 102  | 沃尔玛        |
| 103  | 家乐福        |
| 104  | 华润万家        |
+------+----------+

suppliers_copy 的数据如下:

mysql> select * from suppliers_copy;
+------+----------+
| s_id | s_name   |
+------+----------+
| 101  | 天虹         |
| 102  | 沃尔玛        |
| 103  | 家乐福        |
| 104  | 华润万家         |
| 105  | 屈臣氏         |
| 106  | 万宁         |
| 107  | 苏宁         |
| 108  | 国美         |
+------+----------+

1、SQL UNION 实例

mysql> select * from suppliers
    -> union
    -> select * from suppliers_copy;
+------+----------+
| s_id | s_name   |
+------+----------+
| 101  | 天虹         |
| 102  | 沃尔玛        |
| 103  | 家乐福        |
| 104  | 华润万家         |
| 105  | 屈臣氏         |
| 106  | 万宁         |
| 107  | 苏宁         |
| 108  | 国美         |
+------+----------+

tips:UNION 相同的列只会列出一次,只会选取不同的值。请使用 UNION ALL 来选取重复的值!

2、SQL UNION ALL 实例

mysql> select * from suppliers
    -> union all
    -> select * from suppliers_copy;
+------+----------+
| s_id | s_name   |
+------+----------+
| 101  | 天虹         |
| 102  | 沃尔玛        |
| 103  | 家乐福        |
| 104  | 华润万家         |
| 101  | 天虹         |
| 102  | 沃尔玛        |
| 103  | 家乐福        |
| 104  | 华润万家         |
| 105  | 屈臣氏         |
| 106  | 万宁         |
| 107  | 苏宁         |
| 108  | 国美         |
+------+----------+

tips:显而易见,UNION ALL 显示了所有的值,包括了重复的值。

四、小结

1、对重复结果的处理:UNION 在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。
2、对排序的处理:UNION 将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
3、从效率上说,UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。


转载:https://blog.csdn.net/riemann_/article/details/102461254
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场