1.首先union和union all都是用于合并两个或者两个以上的select语句的结果集的。
二者的语句结构如下:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
2.建表进行测试
create table m_person(
m_id int PRIMARY KEY,
m_name varchar(20) not null,
m_address varchar(20)
);
create table f_person(
f_id int PRIMARY KEY,
f_name varchar(20) not null,
f_address varchar(20)
);
insert into `m_person`(m_name,m_address) values('张三','湖南怀化');
insert into `m_person`(m_name,m_address) values('李四','广东深圳');
insert into `m_person`(m_name,m_address) values('王二','江西九江');
insert into `m_person`(m_name,m_address) values('麻子','广西南宁');
insert into `f_person`(f_name,f_address) values('张三','湖南株洲');
insert into `f_person`(f_name,f_address) values('李四','广东广州');
insert into `f_person`(f_name,f_address) values('王二','江西南昌');
insert into `f_person`(f_name,f_address) values('麻子','广西玉林');
3.测试结果
select m_id id,m_name name,m_address address from `m_person`
union
select f_id id,f_name name,f_address address from `f_person`
select m_id id,m_name name,m_address address from `m_person`
union all
select f_id id,f_name name,f_address address from `f_person`
4.总结
(1) 使用union合并结果集会去掉重复的记录,使用union all合并结果集不会去掉重复的记录。
(2) 使用union和union all内部的每个 select 语句必须拥有相同数量的列。列也必须拥有相
似的数据类型。同时,每个 select 语句中的列的顺序必须相同。
(3) 使用union和union all命令时需要注意,只能在最后使用一个order by命令,是将两个
查询结果合在一起之后,再进行排序,不能同时写两个order by命令。
(4) union会按字段的顺序进行排序而union all只是简单的将两个结果集进行合并。
(5) union all相较于union,速度快。如果我们在确认合并的结果集没有重复的记录时选择union all
进行结果集的合并,提高效率。