常见数据库分页SQL语句

本文介绍了在SQLServer、Oracle及MySQL三种数据库中实现分页查询的具体方法,包括使用Top关键字、ROWNUM及LIMIT函数的不同应用场景,并提供了高效查询的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    

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

    pagezize=5;page=2
    select a.* from (select * from department order by depname) a where rownum<10 
    minus (select * from  (select * from department order by depname) b where rownum<5)

 

 

MySQL数据库

 

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

        select * from table(表名) limit startPos,pageSize

        startPos:定义当前页起始位置 注意:当前页的起始位置只能在当前页确定之后才能定义;

        pageSize:定义每页显示数据的条数

        如果给定2个参数,第一个指定要返回的第一行的偏移量,第二个指定返回行的最大数目。初始行的偏移量是0(不是1)。

        如:select * from table LIMIT 5,10;           这个查询出来的是第6到15之间的10条数据

        如果给定一个参数,它指出返回行的最大数目。

        如:select * from table LIMIT 5;                 这个查询出来的是前5条数据

        (LIMIT n等价于LIMIT 0,n)

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

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

三类数据库中进行分页查询的高效率方法(现在来看):

 

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:    

        SELECT 语句 LIMIT 页面的第一条记录-1,页面容量

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

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

要定义的变量→当前页数:curr       每页显示条数:page

Mysql :
         Select from 表名 limit (curr-1)*page
 
MSsql2000:
         Select top page * from 表名 where 主键 not in (select top (curr-1)*page 主键 from 表名 order by 主键)

 

Oracle:
         Select * from (Select rownum temp_rownum,temp_table.* from (Select * from 表名
               ) temp_table where  rownum< curr * page + 1) where temp_rownum>= (curr - 1) * page + 1
         order by 主键 desc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值