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

©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页