zoukankan      html  css  js  c++  java
  • SQL分页查询【转】

     

    关于SQL语句分页,网上也有很多啦,我贴一部分过来,并且总结自己已知的分页到下面,方便日后查阅。

     

    方法1: 适用于 SQL Server 2000/2005

    1 SELECT TOP 页大小 *
    2 FROM table1
    3 WHERE id NOT IN
    4 (
    5 SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
    6 )
    7 ORDER BY id

     

     

    方法2:
    适用于 SQL Server 2000/2005

     1 --顺序写法:
    2 SELECT TOP 页大小 *
    3 FROM table1
    4 WHERE id >=
    5 (
    6 SELECT ISNULL(MAX(id),0)
    7 FROM
    8 (
    9 SELECT TOP 页大小*(页数-1)+1 id FROM table1 ORDER BY id
    10 ) A
    11 )
    12 ORDER BY id
    13
    14 --降序写法:
    15 SELECT TOP 页大小 *
    16 FROM table1
    17 WHERE id <=
    18 (
    19 SELECT ISNULL(MIN(id),0)
    20 FROM
    21 (
    22 SELECT TOP 页大小*(页数-1)+1 id FROM table1 ORDER BY id Desc
    23 ) A
    24 )
    25 ORDER BY id Desc

     

    方法3:
    适用于 SQL Server 2005

    1 SELECT TOP 页大小 * 
    2 FROM
    3 (
    4 SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
    5 ) A
    6 WHERE RowNumber > 页大小*(页数-1)

     

    说明,页大小:每页的行数;页数:第几页。使用时,请把“页大小”和“页大小*(页数-1)”替换成数字。

     

     

     

    其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
    建议优化的时候,加上主键和索引,查询效率会提高。

    通过SQL 查询分析器,显示比较:我的结论是:
    分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
    分页方案一:(利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句
    分页方案三:(利用SQL的游标存储过程分页)    效率最差,但是最为通用

  • 相关阅读:
    逻辑卷管理LVM (Logical Volume Manager)
    Windows Server 2008 R2 域控修改域用户密码复杂性
    win7 加域开机自动登录域用户
    红帽Linux 配置VNC桌面远程工具
    Redhat linux 挂载命令mount
    SUSE Linux 防火墙设置
    IPv4 地址分类
    常用RAID简介_001
    Element UI
    ie中datepicker赋值不成功
  • 原文地址:https://www.cnblogs.com/Elgin/p/2267224.html
Copyright © 2011-2022 走看看