• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQL分页查询方式汇总

    需求:查询表dbo.Message,每页10条,查询第2页

    1:TOP()

    SELECT TOP(20) * FROM dbo.Message WHERE Code NOT IN
    (SELECT TOP(10) Code FROM dbo.Message)

    2:BETWEEN * AND * , Row_Number() OVER(ORDER BY *) AS rowNum

    SELECT *,ROW_NUMBER() OVER(ORDER BY Code) AS rowNum INTO #a FROM dbo.Message 
    SELECT * FROM #a WHERE rowNum BETWEEN 11 AND 20
    DROP TABLE #a;

    3:WITH * AS () , Row_Number() OVER(ORDER BY *) AS rowNum

    WITH sss AS(
    SELECT *,ROW_NUMBER() OVER(ORDER BY CreateTime) AS rowNum FROM DBO.Message
    )
    SELECT * FROM sss WHERE rowNum BETWEEN 11 AND 20

    4: SQL Server 2012的OFFSET-FETCH筛选

    SELECT * FROM DBO.Message ORDER BY CreateTime OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY

    这里第4中方法做详细介绍:

    TOP选项是一个非常实用的筛选类型,但它有两个缺陷——不是标准SQL,且不支持跳过功能。标准SQL定义的TOP类似筛选称为OFFSET-FETCH,支持跳过功能,这对针对特定页面的查询非常有用。SQL Server2012引入了对OFFSET-FETCH筛选的支持。

    SQL Server 2012中的OFFSET-FETCH筛选被视为ORDER BY子句的一部分,通常用于实现按顺序显示效果。OFFSET子句指定要跳过的行数,FETCH子句指定在跳过的行数后要筛选的行数。请思考一下下面的查询示例。

    SELECT orderid, orderdate, custid, empid
    FROM Sales.Orders
    ORDER BY orderdate, orderid
    OFFSET 50 ROWS FETCH NEXT 25 ROWS ONLY;

    此查询按orderdate、orderid顺序(订单日期从最远到最近,并添加了决胜属性(tiebreaker)orderid)排序Orders表中的行。基于此顺序,OFFSET子句跳过前50行,由FETCH子句仅筛选下面的25行。

    请注意,使用OFFSET-FETCH的查询必须具有ORDER BY子句。此外,FETCH子句不支持没有OFFSET子句。如果你不想跳过任何行,但是希望使用FETCH筛选,你应当使用OFFSET 0 ROWS来表示。不过,没有FETCH的OFFSET是允许的,这种情况是跳过指定的行数,并返回查询结果中所有剩余行。

    OFFSET-FETCH语法有一些有趣的语言方面需要注意。单数格式ROW和复数格式ROWS是可以互换的,此举是让你能够以直观的类似英语方式来描述筛选。例如,假设你仅希望获取一行,如果你指定了FETCH 1 ROWS,虽然这在语法上是有效的,不过看上去会很怪。因此,你可以使用FETCH 1 ROW格式。此互换同样适用于OFFSET子句。另外,如果你不希望跳过任何行(OFFSET 0 ROWS),你可能觉得“first”比“next”更合适,因此,FIRST 和NEXT格式是可以互换的。

    如你所见,从支持跳过功能看,OFFSET-FETCH子句比TOP子句更灵活。不过,OFFSET-FETCH 不支持PERCENT和WITH TIES选项,而TOP支持。由于OFFSET-FETCH是标准的,而TOP不是,我建议使用OFFSET-FETCH作为你的默认选择,除非你需要TOP支持且OFFSET-FETCH不支持的功能。

    以上所述是小编给大家介绍的SQL分页查询方式汇总,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

    您可能感兴趣的文章:
    • Oracle、MySQL和SqlServe三种数据库分页查询语句的区别介绍
    • SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同
    • mysql、mssql及oracle分页查询方法详解
    • Oracle实现分页查询的SQL语法汇总
    • SQL Server 分页查询通用存储过程(只做分页查询用)
    • sqlserver2005利用临时表和@@RowCount提高分页查询存储过程性能示例分享
    • mysql分页原理和高效率的mysql分页查询语句
    • Mysql中分页查询的两个解决方法比较
    • 高效的SQLSERVER分页查询(推荐)
    • oracle,mysql,SqlServer三种数据库的分页查询的实例
    • 防SQL注入 生成参数化的通用分页查询语句
    上一篇:SqlServer中如何解决session阻塞问题
    下一篇:Python版Mssql爆破小脚本
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SQL分页查询方式汇总 SQL,分页,查询,方式,汇总,