`
jingfengluo
  • 浏览: 44496 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle,MySql,SQL server分页

阅读更多

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

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

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

分享到:
评论
5 楼 ycysth 2009-08-01  
SQL Server 的不是N*(M-1)吗?莫非一样?
4 楼 tongfan 2009-08-01  
SQL Server2000 的top不支持变量!!!
3 楼 jingfengluo 2009-07-31  
是的,mysql和其他的实现方式有点区别,我只是讲一下基本的语句,如果要提高效率,还是需要想很多东西的,当然,我不提倡用sql分页,可以用lucene建立需要索引的字段,比如id,和必须用来筛选的字段,把返回的字段还是存在数据库中,用lucene等简单的搜索出记录,然后通过id活动记录,这样会好点,当然,我现在没有这种需求,有的话可以考虑下哦
2 楼 myworkfirst 2009-07-31  
    mysql 那个不行,如果数据量太大的话,效率很低。

原因是,limit关键字,实际是将所有结果一次查出,再进行截取. 最好办法用序列号,建立唯一索引.
   lz可以测试下,灌十几万数据,进行测试下
1 楼 yangpanwww 2009-07-31  
    这个好。..呵呵

相关推荐

Global site tag (gtag.js) - Google Analytics