SQL入门之第十二讲——UNION 联合查询

本文详细介绍了SQL中的UNION和UNION ALL操作符,用于合并多个查询结果。UNION会去除重复行,而UNION ALL则保留所有行,包括重复。通过示例展示了如何在单表查询和多表联合查询中使用这两个操作符,并解释了ORDER BY和LIMIT子句在UNION之后执行的顺序。此外,还讨论了结果集中列数匹配的重要性以及如何根据需求选择使用UNION或UNION ALL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UNION 联合查询定义:

  • 之前的JOIN连接,是可以对多个表进行横向列的合并,而不能对按行进行纵向合并。
  • UNION操作符,则是可以将多个查询结果,按行进行纵向合并

基本语法:

SELECT <字段名> FROM <表名>
UNION
SELECT <字段名> FROM <表名>

1. 单表查询

  • **UNION **在进行合并结果集的时候,如果合并的结果集中有重复行,只会保留其中一行。

实例1:查询学生表中,将学生编号Sid为2-5的记录和1-3的记录通过UNION联合起来

select * from 
students where Sid between 2 and 5
union
select * from 
students where Sid between 1 and 3

解析:
union上面的这个表查询出的结果集中有2,3,4,5的记录,union下面的表查询出的结果有1,2,3
而通过union联合查询时,只会保留重复行(Sid为2和3的记录)其中的一行。

执行结果:
在这里插入图片描述

  • UNION ALL 在进行合并结果集的时候,如果合并的结果集中有重复行,都会将重复行全部显示出来

还是以刚才的那个实例,将 UNION 改成 UNION ALL 在试一试

select * from students 
where Sid between 2 and 5
union all
select * from students 
where Sid between 1 and 3

执行结果:
在这里插入图片描述

2. 多表联合查询

  • UNION操作符上下两个结果集的列数必须相等,否则则会报错。
  • 最终合并的列名,由UNION上面的结果集决定,上面的列名叫啥最终显示啥。

实例2:查询学生表中,年龄Sage在1995年之前出生的学生姓名和教师表中的老师名字进行合并显示

select Sname from students 
where Sage < '1995-01-01'
union
select Tname from teachers

执行结果:
在这里插入图片描述

3. 语句执行顺序

  • 如果查询语句后面跟了 ORDER BY、LIMIT子句这些,这些子句需要在UNION将结果集进行合并之后在执行
select * from students 
where Sid between 2 and 5
union
select * from students 
where Sid between 1 and 3
order by Sid

执行结果:
在这里插入图片描述
查看上面的执行结果时,可以看到order by 是等union将结果进行合并之后才对结果集排序的。

LIMIT 子句也会等结果集进行合并之后才会执行次操作。

select * from students 
where Sid between 2 and 5
union
select * from students 
where Sid between 1 and 3
order by Sid 
limit 3

执行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值