Oracle中分析函数和集合运算的详解

database

一.分析函数

  1. RANK    相同的值排名相同,排名跳跃
  2. DENSE_RANK   相同的值排名相同,排名连续
  3. 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了(不要求字段名一致)

 

 

 

 

 

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

以上是 Oracle中分析函数和集合运算的详解 的全部内容, 来源链接: utcz.com/z/533931.html

回到顶部