阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle 分页查询与数据去重实例

152次阅读
没有评论

共计 1219 个字符,预计需要花费 4 分钟才能阅读完成。

1.rownum 字段

Oracle 下 select 语句每个结果集中都有一个伪字段(伪列)rownum 存在。
rownum 用来标识每条记录的行号,行号从 1 开始,每次递增 1。
rownum 是虚拟的顺序值,前提是先排序

使用 rownum 需注意:
1.rownum 的是在取数据的时候产生的序号。当 rownum 和 order by 一起使用时,会首先选出符合 rownum 条件的记录,然后再进行排序。
2.rownum 在过滤时只能使用:<,<=。rownum 在过滤完之后会重新排行号,如果是 romnum>n 的话,过滤掉不满足条件的,重新排又从 1 开始还是不满足条件,再过滤最终会把所有数据都过滤掉

2. 分页查询

–top n
– 查询工资排名前五的员工信息

 – 思路:先按工资进行排序,再根据行号过滤留下前 5 条记录
 – 因为 SQL 语句的执行顺序是先执行 select 返回查询结果(行号在此时排好)再进行排序
 – 所以先需要用子查询,返回排好序的查询结果
select t.* ,rownum from
(select * from emp order by sal desc)t
where rownum<=5;

– 分页查询
– 查询工资排名 6~10 的员工信息

 – 思路:因为过滤完 rownum 字段也会随之变化,所以 rownum 不能使用大于号判断
 – 所以还是要用子查询先把行号排好定下来(需要用别名与外层查询的 rownum 区分开来)
select * from
(select t.*, rownum rown
from
(select * from emp order by sal desc) t) where rown>5 and rown<=10;

3.rowid

rowid 是 Oracle 中每个表都有的一个实际存在的一个值,rowid 的值是唯一的

4. 数据去重

– 先创建一张表往里面插入几条相同的数据
create table test01(id number(3),name varchar2(10))
insert into test01 values(123,’ 张三 ’);
insert into test01 values(124,’ 李四 ’);
insert into test01 values(125,’ 王五 ’);
insert into test01 values(126,’ 张三 ’);
insert into test01 values(127,’ 张三 ’);
insert into test01 values(128,’ 李四 ’);
insert into test01 values(129,’ 张三 ’);
– 数据去重
– 思路:重复项进行分组,获取每一组最小(或最大)的 rowid,删除不在此列的数据
delete from test01 where rowid not in(
(select min(rowid) from test01 t group by name)
);

Oracle 分页查询与数据去重实例       Oracle 分页查询与数据去重实例

更多 Oracle 相关信息见 Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计1219字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中