oracle中的集合查询

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;

参考:

oracle中的集合查询 union(并)interact(交)except(差)_阿啦印的博客-CSDN博客_oracle集合查询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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小羽儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值