zoukankan      html  css  js  c++  java
  • SQL Server(00):分页方法汇总

    根据SalesOrderID排序,取第16-18行这3条记录。

    方法一:(最常用的分页代码, top / not in)

    SELECT   TOP 3 [SalesOrderID], [RevisionNumber], [OrderDate]
    FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
    WHERE    [SalesOrderID] NOT IN (   SELECT   TOP 15 [SalesOrderID]
                                        FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
                                        ORDER BY [SalesOrderID] )
     ORDER BY SalesOrderID;

    备注: 注意前后的order by 一致

    方法二:排名开窗函数 (row_number() over (order by ))

    SELECT  [SalesOrderID], [RevisionNumber], [OrderDate]
    FROM    (   SELECT [SalesOrderID], [RevisionNumber], [OrderDate] ,
                       ROW_NUMBER() OVER ( ORDER BY SalesOrderID ) AS rowid
                FROM   [AdventureWorks2012].[Sales].[SalesOrderHeader] ) cte
    WHERE   rowid
    BETWEEN 16 AND 18;

    方法三:(offset /fetch next, SQL Server 2012支持,性能最好!)

    SELECT   [SalesOrderID], [RevisionNumber], [OrderDate]
     FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
     ORDER BY SalesOrderID OFFSET 15 ROW FETCH NEXT 3 ROWS ONLY;

    总结:利用变量进行分页

    DECLARE @page INT, @size INT, @Total INT;
    SELECT @page = 3, @size = 10; --当前页面为3,页面大小为10
    
    
    -------方法一
    SELECT   TOP ( @size ) [SalesOrderID], [RevisionNumber], [OrderDate]
    FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
    WHERE    [SalesOrderID] NOT IN (   SELECT   TOP (( @page - 1 ) * @size ) [SalesOrderID]
                                       FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
                                       ORDER BY [SalesOrderID] )
    ORDER BY SalesOrderID;
    
    -------方法二
    SELECT  [SalesOrderID], [RevisionNumber], [OrderDate]
    FROM    (   SELECT [SalesOrderID], [RevisionNumber], [OrderDate] ,
                       ROW_NUMBER() OVER ( ORDER BY SalesOrderID ) AS rowid
                FROM   [AdventureWorks2012].[Sales].[SalesOrderHeader] ) cte
    WHERE   rowid
    BETWEEN ( @page - 1 ) * @size + 1 AND @page * @size;
    
    -------方法三
    SELECT   [SalesOrderID], [RevisionNumber], [OrderDate]
    FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
    ORDER BY SalesOrderID OFFSET ( @page - 1 ) * @size ROWS FETCH NEXT @size ROWS ONLY; ---offset的当前页面是从零开始
  • 相关阅读:
    对象并不一定都是在堆上分配内存的
    Minor GC、Major GC和Full GC之间的区别
    JAVA内存分配与回收策略
    HotSpot虚拟机对象相关内容
    JAVA运行时数据区域
    Java 的强引用、弱引用、软引用、虚引用
    去哪儿网支付系统架构演进(下篇)
    去哪儿网支付系统架构演进(上)
    心智模式:如何改善我们的心智模式?
    心智模式:心智模式成熟的标志
  • 原文地址:https://www.cnblogs.com/springsnow/p/9590661.html
Copyright © 2011-2022 走看看