SQL数据分页查询的方法

 更新时间:2016年11月06日 11:23:31   作者:Brambling  
这篇文章主要为大家详细介绍了SQL数据分页查询的四种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最近学习了一下SQL的分页查询,总结了以下几种方法。

首先建立了一个表,随意插入的一些测试数据,表结构和数据如下图:

现在假设我们要做的是每页5条数据,而现在我们要取第三页的数据。(数据太少,就每页5条了)

方法一:

 select top 5 * 
 from [StuDB].[dbo].[ScoreInfo] 
 where [SID] not in 
 (select top 10 [SID] 
 from [StuDB].[dbo].[ScoreInfo] 
 order by [SID])
 order by [SID]

结果:

此方法是先取出前10条的SID(前两页),排除前10条数据的SID,然后在剩下的数据里面取出前5条数据。

缺点就是它会遍历表中所有数据两次,数据量大时性能不好。

方法二:

 select top 5 * 
 from [StuDB].[dbo].[ScoreInfo] 
 where [SID]> 
 (select MAX(t.[SID]) from (select top 10 [SID] from [StuDB].[dbo].[ScoreInfo] order by [SID]) t )
 order by [SID]

结果:

此方法是先取出前10条数据的SID,然后取出SID的最大值,再从数据里面取出 大于 前10条SID的最大值 的前5条数据。

缺点是性能比较差,和方法一大同小异。

方法三:

 select * 
 from (select *,ROW_NUMBER() over(order by [SID]) ROW_ID from [StuDB].[dbo].[ScoreInfo]) t
 where t.[SID] between (5*(3-1)+1) and 5*3

结果:

此方法的特点就是使用 ROW_NUMBER() 函数,这个方法性能比前两种方法要好,只会遍历一次所有的数据。适用于Sql Server 2000之后的版本(不含)。

方法四:

 select * 
 from [StuDB].[dbo].[ScoreInfo]
 order by [SID] 
 offset 5*2 rows fetch next 5 rows only

结果:

此方法适用于Sql Server 2008之后的版本(不含)。

offset 10 rows fetch next 5 rows only 这句代码我的理解是:跳过前面10条数据(前2页)从下一条开始取5条数据。

个人感觉这个方法比使用 ROW_NUMBER() 函数的方法要好(从代码方面来看,代码也少很多),至于性能方面没有做过测试,就不说了。

不过,最后两种方法的性能肯定是远超前面两种方法的,具体的还是看实用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • sql注入数据库修复的两种实例方法

    sql注入数据库修复的两种实例方法

    这篇文章介绍了sql注入数据库修复的两种实例方法,有需要的朋友可以参考一下
    2013-09-09
  • ODBC连接数据库以SQLserver为例图文详解

    ODBC连接数据库以SQLserver为例图文详解

    开放数据库互连(ODBC)是微软提出的数据库访问接口标准,开放数据库互连定义了访问数据库的API一个规范,这些API独立于不同厂商的DBMS,也独立于具体的编程语言,下面这篇文章主要给大家介绍了关于ODBC连接数据库以SQLserver为例的相关资料,需要的朋友可以参考下
    2023-05-05
  • 数据库访问性能优化

    数据库访问性能优化

    这篇文章主要介绍了数据库访问性能优化,小编总结了一些面向程序员的基本优化法则,本文将结合实例来坦述数据库开发的优化知识,需要的朋友可以参考下
    2015-08-08
  • Sqlserver中char,nchar,varchar与Nvarchar的区别分析

    Sqlserver中char,nchar,varchar与Nvarchar的区别分析

    Sqlserver中char,nchar,varchar与Nvarchar的区别分析,使用sqlserver的朋友可以参考下。
    2011-08-08
  • 最常用的SQL语句

    最常用的SQL语句

    最常用的SQL语句,大家可以看下,都是在开发过程中,比较常用的语句。
    2009-10-10
  • SQL高级应用之同服务器上复制表到另一数据库中并实现去重复

    SQL高级应用之同服务器上复制表到另一数据库中并实现去重复

    项目需求:将数据库Whir_ezMall_Full中的表Whir_Member的数据迁移到数据库Whir_ezMall_Full_c中的Whir_Member表,已存在的ID记录则不插入
    2014-06-06
  • MSSQL 监控数据/日志文件增长实现方法

    MSSQL 监控数据/日志文件增长实现方法

    今天就想实现这么一个功能,每天(频率可以调整)去收集一下数据文件的信息,放到一个表里面,这样方便我们分析数据文件的增长演变例程,甚至你可以将数据文件的增长幅度和业务变化关联起来分析
    2013-08-08
  • sql 聚集索引和非聚集索引(详细整理)

    sql 聚集索引和非聚集索引(详细整理)

    这篇文章主要介绍了聚集索引和非聚集索引的相关知识,比较详细整理了一些知识点,需要的朋友可以参考下
    2014-07-07
  • 关于SQL表中drop table和delete table的区别

    关于SQL表中drop table和delete table的区别

    删表是一个比较危险的操作,这次给了个机会就想尝试下,记得在mysql表中有两种操作,drop与delete,但是在maxcompute产品中尝试时,该产品只支持drop操作。这里说下二者操作的区别,需要的朋友可以参考下
    2023-01-01
  • SQLServer2005创建定时作业任务

    SQLServer2005创建定时作业任务

    这篇文章主要为大家介绍了SQLServer2005创建定时作业任务的详细过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12

最新评论