1.基本内容:
集合操作包括合并操作union、交操作interact、差操作except。
需要注意的是:参与集合操作的表的列数必须相同,对应数据类型也必须相同。
2.Union(合并)
多个表进行union操作,所显示的为多个表去除重复组的合并查询结果,并且会按照编号进行排序
--xsb为学生表,yxxs为优秀学生表
select s1.id ,s1.name ,s1.gender
from xsb s1
union
select s2.id ,s2.name ,s2.gender
from yxxs s2;
--自己尝试union 和 union all的用法时,可将同一张表进行合并,会得到两种结果
select s1.id ,s1.name ,s1.gender
from xsb s1
union
select s2.id ,s2.name ,s2.gender
from xsb s2;
拓展:union all 也是进行多表的合并操作,但是不会对合并结果进行去重操作 ,并且结果集合不会进行排序。
实战演练:
1.给定一个学生表student,字段有stu_id,stu_name,sut_age
需求:查询学生表中id小于15和age大于18的学生信息
--union操作
select *
from student
where stu_id<15
union
select *
from student
where stu_age>18;
--or操作
select *
from student
where stu_id<15 or stu_age>18;
2. 在给定一个班级表class,字段有cls_id,cls_name,cls_count
需求:查询学生表中学生姓名大于18的所有学生信息和班级表中学生数量大于20的班级信息
--union操作
select *
from student
where stu_age>18
union
select *
from class
where cls_count>20;
--or操作
select *
from student, class
where stu_age>18 or cls_count>20;
unoin和or二者的优劣:
通常情况下union是优于or的,因为union使用的是索引扫描,而or使用的是全表扫描。
3.交操作intersect
返回结果:两个集合中的公共部分
实战演练
1.需求:查询学生表中年龄大于18的所有学生信息和班级人数大于20的班级信息
--intersect操作
select *
from student
where stu_age>18
intersect
select *
from class
where cls_count>20;
--and实现
select stu.*, cls.*
from student stu, class cls
where stu.age > 18 and cls.count > 20;
4.差操作(minus)
oracle中没有except这个关键字。
返回结果:返回A中存在B中不存在数据集,通俗来说,就是A中去除掉B中的元素
示例:对于集合A = {a, b, c, d}和集合B = {b, c, w},则A与B 的差集为{a, d}
实战演练:
1.需求:查询学生表中stu_id>15的学生中stu_age<18的学生信息
解析:A——学生表中stu_id>15的所有学生信息;B——学生表中stu_age>18的所有学生信息
select *
from student
where stu_id>15
minus
select *
from student
where stu_age>18;
本文详细介绍了数据库查询中的集合操作,包括Union(合并)、Intersect(交)和Minus(差)。讲解了这些操作的基本概念、使用场景和区别,并通过实例展示了它们在SQL查询中的应用。强调了Union通常优于OR的原因在于其利用索引扫描。同时,给出了交集和差集的实现方式,以及在不同情况下的使用策略。
https://blog.csdn.net/weixin_46093984/article/details/126985984?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~Position-2-126985984-blog-123681634.pc_relevant_landingrelevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~Position-2-126985984-blog-123681634.pc_relevant_landingrelevant&utm_relevant_index=5
1694

被折叠的 条评论
为什么被折叠?



