UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
sql语法:
select id,`name` FROM stu
union
select id,`name` from stu2
在此建了两张表来比较union和union all的区别:
stu
stu2
建表语句:
CREATE TABLE stu(
id INT PRIMARY KEY,
`name` VARCHAR(20),
age INT,
`work` VARCHAR(20)
);
INSERT INTO stu (id,`name`,age,`work`) VALUES
(1,'张三',18,'学生'),
(2,'李四',30,'程序员'),
(3,'王五',26,'医生'),
(4,'赵六',36,'教师'),
(5,'赵四',38,'农民');
我们先看一下union操作的结果:
再看一下union all
可以看出来union把两个结果集进行了去重,而union把两个表的结果都展示出来
咱们再看看union all + group by的去重效果:
他和union去重效果是一样,那么咱们就看一下他们两个谁的执行效率更高一点呢,我们可以看他的执行计划 EXPLAIN
推荐一个博客讲解很细:https://blog.csdn.net/wuseyukui/article/details/71512793
咱们这里就看一下执行时间对比一下
①show profiles;
②how variables;查看profiling 是否是on状态;
③ 如果是off,则 set profiling = 1;
④执行自己的sql语句;
⑤ show profiles;就可以查到sql语句的执行时间;
一般情况下咱们的profiling是1,在执行的时候他也会自己set成1
这个是union的执行时间
然后我们看一下union all+group by 的执行时间:
很显然union的执行时间更短,效率也比union all+group by更高(还是要分不同的场景来使用)