union和union all的区别

172 阅读1分钟

总的来说,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;

image.png

可以看到对于重复项id=2这一项,在结果集中只保留了一项,也就是具有去重的效果。但是好像没有进行排序???

  • 使用union all对两个结果集做并集:
select * from user1 
union all
select * from user2 ;

image.png 可以看到使用union all并没有去重也没有排序