sql server与oracle的分页,详解SQLServer和Oracle的分页查询

不管是DRP中的分页查询代码的实现还是面试题中看到的关于分页查询的考察,都给我一个提示:分页查询是重要的。当数据量大的时候是必须考虑的。之前一直没有花时间停下来好好总结这里。现在又将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是页面需要提供的信息)。具体的计算公式:

?

这样这些变量的值就都可以获得了。具体怎么使用请接着看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 代替。

其他查询都是大同小异的,这里不再赘述。

以上就是两种数据库实现分页功能的案例,希望对大家的学习有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java treemap_Java TreeMap lastEntry()方法与示例

java treemapTreeMap类的lastEntry()方法 (TreeMap Class lastEntry() method) lastEntry() method is available in java.util package. lastEntry()方法在java.util包中可用。 lastEntry() method is used to return the entry (key-value pairs) that exists with the large…

LeetCode OJ 之 Valid Anagram

题目&#xff1a; Given two strings s and t, write a function to determine if t is an anagram of s. For example,s "anagram", t "nagaram", return true.s "rat", t "car", return false. Note: You may assume the string…

oracle光标位置无效,解决在Form表单中光标移动不了问题

apply p8727236_10123 for Developer Suite 10.1.2.3 in Linux首先到oracle的技术支持下载所需补丁,然后1先打补丁7121788&#xff0c;把p7121788_10123_LINUX.zip解压到/home/oracledev目录下(ORACLE_HOME为/u01/app/oracledev/OraHome_dev)$cd /home/oracledev/7121788$expo…

java treemap_Java TreeMap HigherKey()方法与示例

java treemapTreeMap类HigherKey()方法 (TreeMap Class higherKey() method) higherKey() method is available in java.util package. HigherKey()方法在java.util包中可用。 higherKey() method is used to return the lowest key value element higher than the given key e…

centos配置ipv6地址

首先打开网站注册一个账号&#xff1a;http://www.tunnelbroker.net创建一个ipv6的地址&#xff1a;把下面的命令在linux上执行一遍&#xff0c;这个方式是临时生效&#xff0c;重启网卡和重启系统自动失效。把上面的命令保存到一个配置文件中&#xff1a;vi /etc/sysconfig/ne…

php oracle 需要libmysql.dll么_,Windows7环境下Apache+PHP+MySQL完美配置

写作此篇文章的目的在于记录Windows 7环境下成功配置WAMP环境, 初学者在不使用整合好的WAMPServer和XAMPP的情况下徒手配置整合环境貌似有很多意想不到的问题. 这将是我们需要讨论的.我将重现几个经典的问题, 并一一排除. 希望对各位看官有点借鉴作用.一. Apache在整合PHP后无法…

stringreader_Java StringReader skip()方法与示例

stringreaderStringReader类skip()方法 (StringReader Class skip() method) skip() method is available in java.io package. skip()方法在java.io包中可用。 skip() method is used to skip the given number of characters in the stream. skip()方法用于跳过流中给定数量的…

NFS部署及优化(一)

NFS部署及优化&#xff08;一&#xff09;一、NFS的基本概念NFS network file system 网络文件系统必然通过网络通信来实现文件的访问和写入&#xff0c;所以做这个实验的话最好有两台虚拟机配置:A&#xff1a;一个192.169.50.201为server端B&#xff1a;一个192.169.50.200为…

oracle 11g跳过坏块,oracle 使用Dbms_Repair跳过坏块

原博文&#xff1a;http://blog.chinaunix.net/uid-77311-id-3051382.html使用Dbms_Repair跳过坏块步骤1:表tb_test中有坏块(模拟坏块同方法1)SQL> select count(1) from hxl.tb_test;select count(1) from hxl.tb_test*ERROR at line 1:ORA-01578: ORACLE data block corru…

strictmath_Java StrictMath nextUp()方法与示例

strictmathStrictMath类nextUp()方法 (StrictMath Class nextUp() method) Syntax: 句法&#xff1a; public static float nextUp(float fl);public static double nextUp(double do);nextUp() method is available in java.lang package. nextUp()方法在java.lang包中可用。…

并发数据结构-1.1 并发的数据结构的设计

原文链接&#xff0c;译文链接&#xff0c;译者&#xff1a;董明鑫&#xff0c;校对&#xff1a;周可人 随着多个处理器共享同一内存的机器在商业上的广泛使用&#xff0c;并发编程的艺术也产生了巨大的变化。当前的趋势向着低功耗芯片级多线程&#xff08;CMT&#xff09;发展…

printstream_Java PrintStream close()方法与示例

printstreamPrintStream类close()方法 (PrintStream Class close() method) close() method is available in java.io package. close()方法在java.io包中可用。 close() method is used to close the underlying output stream. close()方法用于关闭基础输出流。 close() meth…

oracle底层执行顺序,select语句结构与执行顺序-Oracle

select语句结构与执行顺序select语句的结构与执行顺序&#xff0c;下面的序号代表执行顺序8 SELECT (9)DISTINCT11 1 ROM 3   JOIN 2   ON 4 WHERE 5 GROUP BY 6 WITH {CUBE | ROLLUP}7 HAVING 10 ORDER BY 补…

HDU 4923 Room and Moor(瞎搞题)

瞎搞题啊。找出1 1 0 0这样的序列&#xff0c;然后存起来&#xff0c;这样的情况下最好的选择是1的个数除以这段的总和。然后从前向后扫一遍。变扫边进行合并。每次合并。合并的是他的前驱。这样到最后从t-1找出的那条链就是最后满足条件的数的大小。Room and Moor Time Limit:…

java define_Java Long类的define()方法与示例

java define长类解码()方法 (Long class decode() method) decode() method is available in java.lang package. 在java.lang包中提供了define ()方法 。 decode() method is used to decode the given String value into a Long value. encode()方法用于将给定的String值解码…

linux修改文件用户组,linux命令 修改文件、文件夹所属用户、用户组

最近学习hadoop&#xff0c;在替换配置文件的时候&#xff0c;发现老是报错&#xff0c;没有权限替换。我们知道如何改变文件的用户组与拥有者了&#xff0c;那么&#xff0c;什么时候要使用chown或chgrp呢&#xff1f;或许你会觉得奇怪吧&#xff1f;是的&#xff0c;确实有时…

Kotlin 开篇

Kotlin 是一个基于 JVM 的新的编程语言&#xff0c;由 JetBrains 开发官网地址&#xff1a;http://kotlinlang.org。JetBrains&#xff0c;作为目前广受欢迎的 Java IDE IntelliJ 的提供商&#xff0c;在 Apache 许可下已经开源其Kotlin 编程语言。开源地址&#xff1a;https:/…

inputstream示例_Java InputStream close()方法与示例

inputstream示例InputStream类close()方法 (InputStream Class close() method) close() method is available in java.io package. close()方法在java.io包中可用。 close() method is used to close this InputStream and free all system resources linked with this stream…

linux下的文件系统,Linux根文件系统(“/”文件系统)下的目录介绍

Linux下的文件存储与Windows完全不同&#xff0c;Windows将系统文件存储在系统盘(比如说C:\下)Linux根本没有盘符到概念只有一个根文件系/&#xff0c;各个磁盘分区挂载在/media/下(或者/mnt/下)/下到如/etc,/proc,/bin,/dev,lib等很是让用惯了Windows的用户不解&#xff0c;下…

greenlet 详解

greenlet初体验回到顶部Greenlet是python的一个C扩展&#xff0c;来源于Stackless python&#xff0c;旨在提供可自行调度的‘微线程’&#xff0c; 即协程。generator实现的协程在yield value时只能将value返回给调用者(caller)。 而在greenlet中&#xff0c;target.switch&am…