SQL数据分页查询方法
最近,我研究了sql的分页查询,并总结了以下方法。首先建立一个表格,随机插入一些测试数据,表结构和数据如下图:
现在假设我们要做5页的数据,现在我们需要第三页的数据。(数据太小,每页只有5页)
方法1:
选择顶部5 *
从{ studb }。{ } { } scoreinfo dbo。
{在哪里}不在
(顶部选择10 { } }
从{ studb }。{ } { } scoreinfo dbo。
通过命令})
通过命令}
结果uff1a
此方法是删除前10个SID(前两页),删除SID的前10个数据,然后删除前5个数据中的剩余数据。
缺点是它会遍历表中的所有数据两次,当数据很大时性能会变差。
方法二:
选择顶部5 *
从{ studb }。{ } { } scoreinfo dbo。
在哪里{ } >
(选择最大(T. { }(SID)从选择前10 { } { }从SID studb。{ } { } dbo。scoreinfo以{ SID }))
通过命令}
结果uff1a
此方法是删除前10个数据段的SID,然后取出SID的最大值,然后从大于前10个SID的最大值的数据中删除前5个数据。
缺点是性能较差,方法相同。
方法三:
选择*
从(SELECT *,row_number()结束(以{ }与{ SID)row_id studb }。{ DBO }。{ scoreinfo })t
在(5 *(3-1)+ 1)和5×3之间
结果uff1a
该方法的特点是使用row_number()函数,这是比前两种方法只穿过一次的所有数据。该版本适用于SQL Server 2000(无)。
方法四:
选择*
从{ studb }。{ } { } scoreinfo dbo。
通过命令}
偏移5 * 2行仅取下5行
结果uff1a
此方法适用于SQL Server 2008(NO)之后的版本。
偏移10行取下5行,只有我理解的代码是:跳过前10个数据(前2页)从下一个开始取5个数据。
个人的感觉是比用row_number()函数法。(从代码方面来说,代码要少得多)。
但是,最后两种方法的性能必须远远超过前两种方法,具体可行。
以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。