Oracle中分析函数和集合运算的详解
短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
一.分析函数
- RANK 相同的值排名相同,排名跳跃
- DENSE_RANK 相同的值排名相同,排名连续
- ROW_NUMBER 返回连续的排名,无论值是否相等
下图为三种排名方式的举例
--以下三个分析函数可以用于排名使用。
(1)RANK 相同的值排名相同,排名跳跃 (例如1,2,2,2,下一位就变5 是直接跳跃)
--需求:对T_ACCOUNT表的usenum字段进行排序,相同的值排名相同,排名跳跃
select rank() over(order by ac.usenum desc) ,ac.usenum from t_account ac;
--(2)DENSE_RANK 相同的值排名相同,排名连续(相同的同名,不同的顺序排下去 1,2,2,3,3,4)
--需求:对T_ACCOUNT表的usenum字段进行排序,相同的值排名相同,排名连续
select dense_rank() over(order by ac.usenum desc),ac.usenum from t_account ac;
--(3)ROW_NUMBER 返回连续的排名,无论值是否相等 (直接排序顺序,1,2,3,4,5)
--需求:对T_ACCOUNT表的usenum字段进行排序,返回连续的排名,无论值是否相等
select row_number() over(order by ac.usenum desc),ac.usenum from t_account ac;
--用row_number()分析函数实现的分页查询相对三层嵌套子查询要简单的多(了解):
select * from (
select row_number() over(order by ac.usenum desc)rownumber,ac.usenum from t_account ac
)where rownumber>10 and rownumber<=20;
二. 集合运算
集合运算:将两个结果集合并成一个结果集
--(一)什么是集合运算 : 将两个结果集合并成一个结果集
- --UNION ALL(并集):不去重 返回各个查询的所有记录,包括重复记录。
- --UNION(并集):去重 返回各个查询的所有记录,不包括重复记录。
- --INTERSECT(交集):获得公共部分,返回两个查询共有的记录。
- --MINUS(差集);第一条减去公共部分,返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录。
举例实用:
--准备数据
--1.查询id小于7
select * from t_owners ow where ow.id<=7;
--2 查询iD 大于5
select * from t_owners ow where ow.id >=5;
--1.并集 ,允许重复 UNION ALL
select * from t_owners ow where ow.id<=7
union all
select * from t_owners ow where ow.id >=5;
--2.并集,去重 union
select * from t_owners ow where ow.id<=7
union
select * from t_owners ow where ow.id >=5;
--3.交集 , 共同部分 intersect
select * from t_owners ow where ow.id<=7
intersect
select * from t_owners ow where ow.id >=5;
--4.差集 ,第一条减去共同部分
select * from t_owners ow where ow.id<=7
minus
select * from t_owners ow where ow.id >=5;
注意点:集合运算,允许查不同的表,只要这两张表的字段数量和字段类型一致就OK了(不要求字段名一致)
看完恭喜你,又知道了一点点!!!
你知道的越多,不知道的越多!
~感谢志同道合的你阅读, 你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341