在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

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

126次阅读
没有评论

共计 2201 个字符,预计需要花费 6 分钟才能阅读完成。

本篇文章为大家展示了 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 中怎么实现分页查询,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计2201字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产精品 高清 尿 小便 嘘嘘 | 熟妇人妻av中文字幕老熟妇 | 屁屁影院ccyy备用地址 | 成av人片在线观看www | 一级韩国aa毛片免费观看 | 国产又黄又猛又粗又爽的a片动漫 | 一二三区 | 91成人精品 | 久操免费视频 | 中文字幕影视 | 日本mv高清在线成人高清 | 69国产成人精品午夜福中文 | 国产精品美女网站在线观看 | 青青热久免费精品视频在线观看 | 狠狠操网站 | 日产国产精品亚洲系列 | 久久一区二区三区精品 | 老汉色老汉首页a亚洲 | 亚洲精品午夜级久久久久 | 熟妇人妻无码中文字幕 | 深夜福利影院 | 欧美日韩一区二区三区视频 | 人妻少妇精品无码专区动漫 | 国产亚洲精品aaaaaaa片 | 久久免费精品 | 亚洲国产精品免费观看 | 日韩精品无码中文字幕一区二区 | 在线中文字幕精品b | 国产亚洲精品久久久久久无挡照片 | 香蕉国产综合久久猫咪 | 欧美日韩国产亚洲一区二区三区 | 97影院理论午夜伦不卡 | 中文字幕在线观看亚洲 | 秋霞鲁丝片av无码 | 国产成人av一区二区三区在线 | 中文无码一区二区三区在线观看 | 亚洲精品一区二区三区香蕉在线看 | 国产福利兔女郎在线观看 | 夜夜躁狠狠躁日日躁视频 | 国产精品99久久不卡 | 一区二区不卡在线观看 |