Oracle中rownum的基本用法

Oracle中rownum的基本用法


1.前言
  • 用sql分页查询在mysql中我们会想到用limit,然而在oracle中并没有这个关键字,oracle不能分页了吗?不是的,rownum可以解决这一问题。
2.基本使用

注意:rownum不支持>, >=, =, !=, between…and…这几个运算符,只能用符号(<、<=)
2.1示例:查询表3条以后的记录
原始数据
在这里插入图片描述
错误示范

 select id,name from practice where rownum > 3;

这种查询是没有结果的,select id,name from practice where rownum = 3这种也是错误的。
原因:
ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。
它取得第一条记录则rownum值为1,第二条为2,依次类推。
如果你用>,>=,=,between…and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除, 接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。
(select id,name from practice where rownum between 1 and 5这种情况除外)

正解
先把rownum的列与table"拼接"作为一个子表来查询,这样rownum所在的列就是代表一个属性(重点是取别名,不取别名它依然是按照以前那种序列排序

select *
from (
         select ROWNUM r,CB_BA_BANK_PRACTICE.*
         from practice
      ) where r > 3;

在这里插入图片描述

2.2选取列表中某个值前3的所有记录

例如:

  • 选取排序号前三的记录
    错误示范
select *
from practice where ROWNUM < 3 order by ID_ desc;

以前这么写我记得会先去取前两列值在排序,这里竟然对了 :o,有人知道指正吗

正解

先排序去重
select distinct * from practice order by ID_ desc;

再选出前3的sal

select *
from (
    select distinct * from CB_BA_BANK_PRACTICE order by ID_ desc
    ) where ROWNUM < 3;

在这里插入图片描述

2.3选取区间[a,b]的记录
这里的思想和第一个例子思想是一样的,先把rownum的列与table"拼接"作为一个子表来查询,这样rownum所在的列就是代表一个属性(重点是取别名,不取别名它依然是按照以前那种序列排序)在对这个值进行between 处理;

3.分页查询

单表:

SELECT * FROM (
	SELECT p.*,ROWNUM r FROM  CB_BA_BANK_PRACTICE p WHERE ROWNUM < pageNumber*pageSize
	) WHERE r > pageNumber*pageSize

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值