MYSQL之合并查询 UNION、UNION ALL
学习目标
-
掌握UNION和UNION ALL的使用方法
-
知道UNION和UNION ALL的区别
1 UNION
UNION 操作符用于合并两个或多个 SELECT 语句的结果集,并消除重复行。
注意,使用UNION时,两个结果集必须有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
数据集介绍
-
我们的数据集很简单,图书(book)表
ID | Title |
---|---|
1 | The Witcher |
2 | Harry Potter |
3 | Nineteen Eighty-Four |
4 | The Great Gatsby |
-
电影(Movies)表
ID | Title |
---|---|
1 | Iron Man |
2 | Harry Potter |
3 | Dr Strange |
4 | Matrix |
UNION 合并数据
-
我们可以使用
UNION
将两个表中数据合并到一起,注意UNION
合并两个SELECT
语句的结果中会去除重复值,如下图所示
SELECT * FROM BOOKS UNION SELECT * FROM MOVIES
查询结果 :
ID | Title |
---|---|
1 | The Witcher |
2 | Harry Potter |
3 | Nineteen Eighty-Four |
4 | The Great Gatsby |
1 | Iron Man |
3 | Dr Strange |
4 | Matrix |
-
上面的结果中所有的书名和电影名都放在一个表中,需要注意,在电影表和图书表里都包含Harry Potter,但是在结果中出现了一次
-
小结
-
选择的列数必须相同:
SELECT title FROM BOOKS UNION SELECT * FROM MOVIES
上面的SQL会报错:1222 - The used SELECT statements have a different number of columns, Time: 0.000000s
-
所选列的数据类型必须在相同的数据类型组中(如数字或字符)
-
列的名称不必相同
SELECT title AS books FROM BOOKS UNION SELECT title AS movies FROM MOVIES
上面的SQL会正常执行
-
2 UNION ALL
-
UNION ALL 运算符用于将两个 SELECT 语句的结果组合在一起,重复行也包含在内,如下图所示:
-
UNION ALL 运算符所遵从的规则与 UNION 一致。
SELECT * FROM BOOKS UNION ALL SELECT * FROM MOVIES
查询结果:
ID | Title |
---|---|
1 | The Witcher |
2 | Harry Potter |
3 | Nineteen Eighty-Four |
4 | The Great Gatsby |
1 | Iron Man |
2 | Harry Potter |
3 | Dr Strange |
4 | Matrix |
-
从上面的结果中看出 Harry Potter 出现了两次
小结
UNION
和UNION ALL
关键字都可以将两个结果集合并为一个,主要区别如下:
1、UNION
在进行表连接后会去掉重复的记录,而UNION ALL
不会去重
2、UNION
因为要去重,所以需要对表中的元素进行排序,当数据量较大时,UNION
操作会比较耗时
3、UNION ALL
只是简单的将两个结果合并后就返回,速度较快
4、在合并数据时,如果确定没有重复数据,尽量使用UNION ALL