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

前端之家收集整理的这篇文章主要介绍了Oracle分页SQL原理与使用(高效)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本次分页实现主要靠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)

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

猜你在找的Oracle相关文章