union和union all

本文详细介绍了SQL中Union和Union All的区别与用法。通过创建示例表并插入数据,对比了两种方法合并结果集的特点:Union会去除重复记录并自动排序,而Union All保留所有记录且速度更快。此外还强调了使用时需注意列的数量和类型一致。

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

      进行结果集的合并,提高效率。



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值