千家信息网

SQLServer和Oracle中怎么实现分页查询

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章为大家展示了SQLServer和Oracle中怎么实现分页查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.分页算法最开始我在网上查找资料的时候,
千家信息网最后更新 2026年11月01日SQLServer和Oracle中怎么实现分页查询

本篇文章为大家展示了SQLServer和Oracle中怎么实现分页查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1.分页算法

最开始我在网上查找资料的时候,看到很多分页内容,感觉很多很乱。其实不是这样。网上那些资料大同小异。问题出在了我自己这里。我没搞明白进行分页的前提是什么?我们都知道只要有分页都会涉及这些变量:每页又多少条记录(pageSize)、当前页(pageNow)、总记录数(totalRecords)、总页数(totalPages)、开始页(beginRow)、结束页(endRow)。网上的那些资料分页算法有用到pageSize的,有用到beginPage还有用到endPage.其实这些变量需要分类:我将他们分为三类: A.需要从数据库中查询出来的:totalRecords. " select count(*) from tableName" B.最基本的需要用户提供的:pageSize和pageNow.(个人觉得这是分页算法的前提) C.从其他变量计算得来的:totalPages、beginRow和endRow.(这里需要计算出beginRow和endRow是由于分页查询中需要用到,totalPages是页面需要提供的信息)。具体的计算公式:

totalPages: if ((totalRecords% pageSize) == 0) {               totalPages = totalRecords/ pageSize;             } else {               totalPages = totalRecords/ pageSize + 1;             } beginRow: (pageNow-1) * PageSize +1 endRow:   pageNow * PageSize

这样这些变量的值就都可以获得了。具体怎么使用请接着看2和3部分。

2.Oracle中的常用分页方法

其实不管是Oracle还是SQLServer,实现分页查询的基础都是子查询。用我自己的话说就是:select中套select。 Oracle分页方式有三种。我这里只讲一种容易理解的。以员工表(emp)为例。假设有10条记录,现在分页要求每页5条记录,当前页为2.则查询出来的是记录为6-10。我们先用具体的数字做,然后再换成变量。

Oracle实现第一步:

select a.*,rownum rn from (select * from emp) a;其中rownum是Oracle内部分配行号。括号中的select * from emp是将emp表中的记录全部查询出来。然后我们再将查询出来的结果作为视图进一步查询。外面的select除了查询emp的全部以外再加一个rownum,以便后面的查询使用。

Oracle实现第二步:

select a.*,rownum rn from (select * from emp) a where rownum<=10 ;第二步加条件查询出行号小于等于10的记录。这里可能会有这样的疑问为什么不直接写rownum>=6 and rownum<=10.不就解决问题了。这里Oracle内部机制不支持这种写法。

Oracle实现第三步:

select * from (select a.*,rownum rn from (select * from emp) a where rownum<=10) where rn>=6 ;ok,这样就可以完成查询6-10条记录了。 最后。我们转换为变量。可能是在java程序中也可能是在pl/sql中。

需要转换的又三个:

"emp"的位置为具体表名、"6"的位置 为(pageNow-1) * PageSize +1 、"10"的位置 为 pageNow * PageSize。 这种方式可以作为模板使用,修改起来很方便。所有改动只需要改动最里层就可以了。比如查询指定列的情况:修改最里层select ename,sal from emp;根据薪水列排序:select ename,sal from emp order by sal;都只需要修改最里层。

3.SQLServer中的常用分页方法

我们还是采用员工表的例子讲SQLServer中分页的实现

第一种TOP的使用:

SQLServer实现第一步:select top 10 * from emp order by empid ;按照员工ID升序排列,取出前10条记录。SQLServer实现第二步:select top 5* from (select top 10 * from emp order by empid ) a order by empid desc 。将取出的10条记录按员工号降序排列再取出5条记录。这里的第一次用升序排序,第二次用降序排序是巧妙之处。没有想到top能起到这样的效果。这里的10的位置用变量pageNow * PageSize代替而5用PageSize 代替。

第二种Top和In的使用:

select top 5 * from emp where empid in (select top 10 empid from emp order by empid) order by empid desc; 这里的10的位置用变量pageNow * PageSize代替而5用PageSize 代替。 其他查询都是大同小异的,这里不再赘述。

上述内容就是SQLServer和Oracle中怎么实现分页查询,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

查询 变量 位置 员工 内容 算法 资料 排序 大同小异 前提 升序 就是 常用 技能 方式 方法 是在 有用 知识 还是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 精品咖啡豆 互联网核心科技是什么 易互联网科技有限公司 互联网未来科技 易通互联网络科技有限公司 天扬科技互联网广告 互联网科技股午盘股票涨跌 济南和联互联网科技有限公司 昭通云南众福互联网科技有限公司 杭州壁岐互联网科技有限公司 长沙茂晟互联网科技有限公司 长沙互联网科技 互联网科技圈年度人物 银行科技岗属于互联网吗 梅州GM互联网络科技有限公司 启辰互联网科技 马化腾互联网科技教学 互联网科技和医药行业 亚光科技低轨卫星互联网 数字科技和互联网金融哪个好 上海挚品互联网科技有限公司 中关村互联网 科技集团 蓝思科技飞鸽互联网 互联网科技类展会 科技与互联网的利与弊 阿里巴巴算科技企业还是互联网 互联网科技创新服务 荆州市昕露互联网络科技有限公司 玉溪新华互联网科技好不好 福仕德教育科技互联网
0