一、区别1:取结果的交集 1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序; 2、union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;
二、区别2:获取结果后的操作 1、union: 会对获取的结果进行排序操作 2、union all: 不会对获取的结果进行排序操作
三、区别3:
代码语言:javascript复制建立表脚本:
CREATE TABLE `student` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`sex` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3
student表测试数据:
id username sex
------ --------- --------
1 xiaoming 1
2 xiaohua 0
3 hanmeimei 0
4 allen 1
5 penguin 1
CREATE TABLE `student2` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`sex` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3
student2表测试数据:
id username sex
------ --------- --------
1 xiaoming 1
2 xiaohua 0
3 hanmeimei 0
4 allen 1
5 justin 1
1、union看到结果中去重和排序结果
SELECT * FROM student
UNION
SELECT * FROM student2
查询返回数据视图
id username sex
------ --------- --------
1 xiaoming 1
2 xiaohua 0
3 hanmeimei 0
4 allen 1
5 penguin 1
5 justin 1
2、union all 结果中的结果合并
SELECT * FROM student
UNION ALL
SELECT * FROM student2
查询返回数据视图
id username sex
------ --------- --------
1 xiaoming 1
2 xiaohua 0
3 hanmeimei 0
4 allen 1
5 penguin 1
1 xiaoming 1
2 xiaohua 0
3 hanmeimei 0
4 allen 1
5 justin 1
四、总结 union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高