分页的相关知识汇总

 比如:要求选取 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,OracleMySQL分页语句做了介绍……

  我们在编写MIS系统和Web应用程序等系统时,都涉及到与数据库的交互,如果数据库中数据量很大的话,一次检索所有的记录,会占用系统很大的资源,因此我们常常采用,需要多少数据就只从数据库中取多少条记录,即采用分页语句。根据自己使用过的内容,把常见数据库Sql Server,OracleMySQL的分页语句,从数据库表中的第M条数据开始取N条记录的语句总结如下:

  SQL Server

  从数据库表中的第M条记录开始取N条记录,利用Top关键字:注意如果Select语句中既有top,又有order by,则是从排序好的结果集中选择:

  SELECT *
  
FROM ( SELECT Top N *
  FROM (SELECT Top (M + N - 1) * FROM 表名称 Order by 主键
 desc) t1 ) t2
  Order by 主键 asc

  例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:

  SELECT *
  
FROM ( SELECT TOP 20 *
  
FROM (SELECT TOP 29 * FROM Sys_option order by sys_id desc) t1) t2
  Order by sys_id asc

  Oralce数据库

  从数据库表中第M条记录开始检索N条记录

  SELECT *
  FROM (SELECT ROWNUM r,t1.* From 表名称
 t1 where rownum < M + N) t2
  where t2.r >= M

  例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:

  SELECT *
  
FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2
  Where t2.R >= 10

  MySQL数据库

  My sql数据库最简单,是利用mysqlLIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为:

以下是引用片段:
  SELECT * FROM 表名称 LIMIT M,N

  例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:

以下是引用片段:
  select * from sys_option limit 10,20

 

=============================================================================================

经过几天业余时间的研究,已经做了一套关于分页的高效解决方案,所谓的高效,就是在数据库底层,也做了分页查询,因此在进行大数据量的查询时,速度会很快。如果不做底层的分页的话,数据量超过5W,速度将会慢的象乌龟一样。

  这套解决方案,是按照MVC的模式来做的,基于STRUTS框架。分为三个部分,表现层用的是JSP,其中用了JSTLpager 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;   

             }   


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值