比如:要求选取 tbllendlist 中 第3000页的记录,每一页100条记录。
----------
方法1:
----------
select top 100 * from tbllendlist
where fldserialNo not in
(
select top 300100 fldserialNo from tbllendlist
order by fldserialNo
)
order by fldserialNo
----------
方法2:
----------
SELECT TOP 100 *
FROM tbllendlist
WHERE (fldserialNo >
(SELECT MAX(fldserialNo)
FROM (SELECT TOP 300100 fldserialNo
FROM tbllendlist
ORDER BY fldserialNo) AS T))
ORDER BY fldserialNo
方法1执行速度比较快!
资料引用:http://www.knowsky.com/301758.html
select top 5 * from ( select top 15 * from ( select * from tableName) a ) a order by id desc
5 //每页显示的行数
15 //该页数 * 每页显示的行数
select * from tableName //传进来的SQL查询语句
现在一般常用的有以下2种方法:
1. select top @pagesize * from table1 where id not in (select top @pagesize*(@page-1) id from table1 order by id) order by id
2. select * from (select top @pagesize * from (select top @pagesize*@page * from table1 order by id) a order by id desc) b order by id
三类数据库中进行分页查询的高效率方法(目前来看):
Oracle(大型网站数据库平台): SELECT * FROM (
SELECT MY_TABLE.*,ROWNUM AS MY_ROWNUM FROM (
/** 括号里写实际的需要查询的SQL语句**/
) AS MYTABLE WHERE ROWNUM <=200/**这里是一页中的最后一条记录**/
/) WHERE MY_ROWNUM>=10 /**这里是一页中的第一条记录**/
SQLServer: SELECT * FROM (
SELECT TOP 页面容量 * FROM (
SELECT TOP 页面容量*当前页码 * FROM
表 WHERE 条件 ORDER BY 字段A ASC
)AS TEMPTABLE1 ORDER BY 字段A DESC
) AS TEMPTABLE2 ORDER BY 字段A ASC
MySQL(和PHP搭配之最佳组合): SELECT 语句 LIMIT 页面的第一条记录-1,页面容量
本文来源于 WEB开发网 原文链接:http://www.cncms.com.cn/mysql/4351.htm
==========================================================================================
几条常见的数据库分页 SQL 语句
2007-11-07 10:57 作者: ares 出处: IT专家网 责任编辑:>幽灵
作者根据自己使用过的内容,把常见数据库Sql Server,Oracle和MySQL的分页语句做了介绍……
我们在编写MIS系统和Web应用程序等系统时,都涉及到与数据库的交互,如果数据库中数据量很大的话,一次检索所有的记录,会占用系统很大的资源,因此我们常常采用,需要多少数据就只从数据库中取多少条记录,即采用分页语句。根据自己使用过的内容,把常见数据库Sql Server,Oracle和MySQL的分页语句,从数据库表中的第M条数据开始取N条记录的语句总结如下:
SQL Server
从数据库表中的第M条记录开始取N条记录,利用Top关键字:注意如果Select语句中既有top,又有order by,则是从排序好的结果集中选择:
SELECT * |
例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
SELECT * |
Oralce数据库
从数据库表中第M条记录开始检索N条记录
SELECT * |
例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
SELECT * |
MySQL数据库
My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为:
以下是引用片段: |
例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
以下是引用片段: |
=============================================================================================
经过几天业余时间的研究,已经做了一套关于分页的高效解决方案,所谓的高效,就是在数据库底层,也做了分页查询,因此在进行大数据量的查询时,速度会很快。如果不做底层的分页的话,数据量超过5W,速度将会慢的象乌龟一样。
这套解决方案,是按照MVC的模式来做的,基于STRUTS框架。分为三个部分,表现层用的是JSP,其中用了JSTL和pager taglib做分页;控制层就是用的很传统的Action;底层就用的是Spring+Hibernate。下面分三个部分慢慢说:
一、底层:
底层是基于Spring+Hibernate来做的。在DAO这一层,为其增加两个方法,一个方法为根据HQL语句和条件进行查询,另外一个方法为根据HQL语句、条件、开始的记录位置,共显示的记录数进行分页查询。底层的分页查询用的是Hibernate提供的分页查询。
方法体如下所示: OK,底层的工作就做完了!
java 代码
1. public List findByCondition(String sql,Object[] parems){
2.
3. List result = new ArrayList();
4.
5. try{
6.
7. result = getHibernateTemplate().find(sql,parems);
8.
9. }catch(RuntimeException re){
10.
11. re.printStackTrace();
12.
13. }
14.
15. return result;
16.
17. }
18.
19.
20.
21. public List findByCondition(String sql,Object[] parems,int first,int max){
22.
23. List result = new ArrayList();
24.
25. try{
26.
27. Session sess = getSession();
28.
29. Query query = sess.createQuery(sql);
30.
31. for(int i = 0;i
32.
33. if(parems[i] instanceof Integer){
34.
35. query.setInteger(i,((Integer)parems[i]).intValue());
36.
37. }
38.
39. if(parems[i] instanceof String){
query.setString(i,parems[i].toString());
}
}
query.setFirstResult(first);
query.setMaxResults(max);
result = query.list();
}catch(RuntimeException re){
re.printStackTrace();
}
return result;
}