分页查询就是根据需要每次只返回所需要的数据,而不用每次都从数据库中全部把数据提取出来,这样可以降低程序与数据库之间的数据传送量,并且还可以提高程序的性能。 一般来说我们在数据量大的情况下总是会分页显示(谁也不会一下子将几万条数据全部一次性显示给用户),这样决定我们返回的查询结果集的参数有两个:当前显示的页数pageNo和每页要显示的记录条数pageSize。
一般作为查询数据库返回的结果有两个:正要查询当前页的所有记录集(List)和某条件下数据库中的记录总数(totalRecords);
为了体现面向对象编程,我们会把分页的数据封装在一个单独的类里
import java.util.List; public class PageModel { private List list; private int totalRecords; private int pageSize; private int pageNo; /** * 总页数 * @return */ public int getTotalPages() { return (this.totalRecords + this.pageSize - 1)/this.pageSize; } /** * 取得首页 * @return */ public int getTopPageNo() { return 1; } /** * 上一页 * @return */ public int getPreviousPageNo() { if (this.pageNo <= 1){ return 1; } return this.pageNo - 1; } /** * 下一页 * @return */ public int getNextPageNo() { if (this.pageNo >= this.getBottomPageNo()) { return this.getBottomPageNo(); } return this.pageNo + 1; } /** * 尾页 * @return */ public int getBottomPageNo() { return this.getTotalPages(); } public List getList() { return list; } public void setList(List list) { this.list = list; } public int getTotalRecords() { return totalRecords; } public void setTotalRecords(int totalRecords) { this.totalRecords = totalRecords; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } }
Oracle 的sql
第一种写法
select * from ( select a.*,rownum rn
from (select * from user_login_info t) a where rownum <=40
) where rn >=21;
第二种写法
select * from (
select a.*,rownum rn from (select * from user_login_info t) a
) where rn between 21 and 40;
对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。
这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。
SQL Server 2000/2005
SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) ORDER BY id
方法2:
适用于 SQL Server 2000/2005
SELECT TOP 页大小 * FROM table1 WHERE id > ( SELECT ISNULL(MAX(id),0) FROM ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) A ) ORDER BY id
方法3:
适用于 SQL Server 2005
SELECT TOP 页大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 ) A WHERE RowNumber > 页大小*(页数-1)
说明,页大小:每页的行数;页数:第几页。使用时,请把“页大小”以及“页大小*(页数-1)”替换成数码。
MYSQL
SELECT * FROM TT LIMIT 1,20
SELECT * FROM TT LIMIT 21,30
/*
如果你是几千上万数据,就直接使用mysql自带的函数 limit的普通用法就ok了,如果是100万以上的数据,可能就要讲方法了,下面我们来做个百万级数据的分页查询语句.
mysql> select * from news where id>=(select id from news limit 490000,1) limit 10; //0.18 sec //很 明显,这 种方式胜出 .
mysql> select * from news limit 490000,10 //0.22 sec;
*/
以下的文章主要介绍的是MySQL分页的实际操作方案,其实关于实现MySQL分页的最简单的方法就是利用利用mysql数据库的LIMIT函数,LIMIT [offset,size] rows可以从MySQL数据库表中第M条记录开始检索N条记录的语句为:
SELECT * FROM 表名称 LIMIT M,N
例如从表Sys_option(主键为sys_id)中从第10条记录开始检索20条记录,语句如下:
select * from sys_option limit 10,20
select * from table [查询条件] order by id limit ?,?
相关推荐
web网站数据库分页查询设计与实现
基于winform的分页查询技术,主要用的vs2013跟sql server 2008,效率挺高,需要的朋友可以下载,相互学习。
用户历史订单列表查询rowkey设计技巧 最左前缀原则
李兴华 DAO设计模式 实现 增删改查 分页查询 完整代码
该工程是本人做的SQL Server分页UI设计以及分页控制,现在已经成型了,通过基本的配置你们可以在自己的电脑上查看该工程的分页效果。 详细介绍请看:https://blog.csdn.net/A13432421434/article/details/80096897
NULL 博文链接:https://abstractforever.iteye.com/blog/606827
1、支持通过Url进行分页: AspNetPager除提供默认的类似于DataGrid和GridView的PostBack分页方式外,还支持通过Url进行分页...查询结果Url分页 克隆属性及事件 页索引输入/选择框 自定义导航按钮 在用户控件中实现分页
Pager-taglib实际上是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合支持多种风格的分页显示。会形成多种不一样的分页页面,风格各异,她自带的DEMO就有七种左右的分页风格,包括...
使用JDBC实现简单购物车、简单分页查询
PHP程序设计-3期(KC016) 4.3.7分页查询记录课后习题.doc 学习资料 复习资料 教学资源
PHP程序设计-3期(KC016) 4.3.7分页查询记录常见问题.doc 学习资料 复习资料 教学资源
PHP程序设计-3期(KC016) 4.3.7分页查询记录拓展知识.doc 学习资料 复习资料 教学资源
MYSQL分页查询.zip易语言项目例子源码下载MYSQL分页查询.zip易语言项目例子源码下载 1.合个人学习技术做项目参考 2.适合学生做毕业设计参考 3.适合小团队开发项目参考
用jsp实现的学生信息查询系统,只有一张学生表和一张管理员表。实现了自定义标签库、国际化和分页。分页设计得比较巧妙,可以共用。有建表的sql语句,还用到了java反射。整个结构耦合度低,代码清晰易懂!
java通用分页代码实例,适用于任何一种数据库,方便,快捷,可移植性高,简单易懂。
通过用户阅读行为自动获取下一段/上一段数据的确比点击"下一页"按钮的用户体验要好, 但同样有弊端: a) 当用户已经到第100页时, 他要回到刚才感兴趣的第5页的信息时, 并不是很容易, 这其实是一条设计应用的规则, ...
基于node.js、vue、mongodb等技术构建的web系统,界面美观,功能齐全,适合用作毕业设计、课程设计作业等,项目均经过测试,可快速部署运行! 基于node.js、vue、mongodb等技术构建的web系统,界面美观,功能齐全,...
1. 查询一张表,把他的记录集显示在datagridview中. 2. 要分页显示.,分页效果如下 首页 前一页 后一页 尾页 第 页 共 条记录 3. 可以用前台的方式,或数据库的方式,或者ado.net的方式. 4. 用winform程序实现
对于Flex +BlazeDS+java开发的项目分页组件的实现,基本设计是分页ui组件负责前台分页的显示,后台java实现sql分页查询。 附带源码。
强大但又简单的oracle分页与伪列代码