总的来说,union去重且排序,union all不去重不排序,因此,union all的执行效率比union高。在确定不需要去除重复项的前提下,优先选择union all。
- 创建两张表user1、user2并插入数据:
CREATE TABLE `user1` (
`id` int(0) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
PRIMARY KEY (`id`) USING BTREE
);
INSERT INTO `user1` VALUES (1, '林一');
INSERT INTO `user1` VALUES (2, '易烊千玺');
INSERT INTO `user1` VALUES (3, '刘德华');
CREATE TABLE `user2` (
`id` int(0) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
PRIMARY KEY (`id`) USING BTREE
) ;
INSERT INTO `user2` VALUES (1, '张学友');
INSERT INTO `user2` VALUES (2, '易烊千玺');
INSERT INTO `user2` VALUES (3, '郭富城');
INSERT INTO `user2` VALUES (4, '黎明');
- 使用union对两个结果集做并集:
select * from user1
union
select * from user2;
可以看到对于重复项id=2这一项,在结果集中只保留了一项,也就是具有去重的效果。但是好像没有进行排序???
- 使用union all对两个结果集做并集:
select * from user1
union all
select * from user2 ;
可以看到使用union all并没有去重也没有排序。