加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle分页SQL原理与使用(高效)

发布时间:2020-12-12 15:55:13 所属栏目:百科 来源:网络整理
导读:本次分页实现主要靠ROWNUM伪列+子查询完成 一、实现原理: 在oracle数据库中提供有ROWNUM伪列,该伪列的作用是: 1)取得第一行数据 2)取得前N行数据 利用第二条特性可以很方便的实现分页 以Oracle中自带的Emp表为例,执行带有ROWNUM的查询,取出第6-12行的

本次分页实现主要靠ROWNUM伪列+子查询完成

一、实现原理:

在oracle数据库中提供有ROWNUM伪列,该伪列的作用是:
1)取得第一行数据
2)取得前N行数据
利用第二条特性可以很方便的实现分页
以Oracle中自带的Emp表为例,执行带有ROWNUM的查询,取出第6-12行的数据:

SELECT empno,ename,job,ROWNUM FROM emp WHERE ROWNUM<=12 ;


之后,将查询的结果作为一张临时表进行查询,将范围限定在第5行之后 。
(要为ROWNUM设置别名,方便数据取出)

SELECT * FROM ( SELECT empno,ROWNUM rn FROM emp WHERE ROWNUM<=12) temp WHERE temp.rn>5 ;


虽然ROWNUM只能取前N行的数据,但在子查询中是将第一次查询的结果作为了一张新的表,而rn只是表中的一个列,因此可以任意限定

二、程序中使用

清楚了原理之后,一般需要4个参数来控制分页:
1)当前所在页:currentPage
2)每页显示的行数:lineSize
3)模糊查询的列:column
4)关键字:keyWord

通过这些参数可以完成大部分业务需求,使用currentPage * lineSize限定ROWNUM,依然以emp表为例,假设每页要显示7条数据,查询第3页的内容:
currentPage = 3
lineSize = 7
则此时ROWNUM<=21 即:ROWNUM <= currentPage * lineSize
外层查询 rn>14 即:temp.rn > ( currentPage - 1 ) * lineSize
有模糊查询时在子查询中增加LIKE即可
最终的SQL:

SELECT * FROM ( SELECT empno,ROWNUM rn FROM emp WHERE ROWNUM<=(currentPage * lineSize) AND column LIKE '%' ) temp WHERE temp.rn>((currentPage - 1) * lineSize)

在程序中将参数用占位符替换,之后分别设置即可 。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读