学习SqlServer到现在快两年了吧,分页查询总是忘了看笔记,看了又忘。之前用的分页都是row_number函数的方式,背不住。。。直到今天,看到别人写的另一种分页写法,看似比row_number简单。好记。。。
分页原理:越过多少条,取多少条
-- 一页取五条select top(5) * from Employees where EmployeeID not in ( -- 越过多少条(越过多少页*每页的条数) select top(5*2) EmployeeID from Employees order by EmployeeID)order by EmployeeID
以前用的row_number函数的方式也记录一下吧
--两种写法没什么两样,都可以实现,--between 第一种select * from ( select *,row_number() over(order by id)as number from Student)as s where s.number between 5 and 8--第二种select * from ( select*,row_number()over(order by id) as num from Student)as stu where stu.num>=20 and stu.num<=30
论上面两者的效率的话,数据量不是很大的时候也都差不多吧,数据量大的时候也许row_number更高效些。第一种方式取前面部分和后面部分的数据比较高效,如果说数据量很大用第一种方式取中间部分数据的话相对来说比较慢的。
row_number函数分页相对来说比较通用
刚刚搜索引擎查了下分页方法,没想到还有其他方法。。在这也记一下吧,虽然对其还不是很理解,有时间在看看相关资料了解一下
--跳过多少条,取多少条 offset 需要跳过的条数 rows fetch next 每页取的条数 rows onlyselect * from City order by CityId offset 5 rows fetch next 5 rows only
查询结果:
这个分页方法我对它的理解是 offset(需要跳过的条数) 假设一页分10条,你当前是第三页那么就填(3*10)当前页*每页的条数,next (每页的条数),如果每页显示10条,那么就是 next 10
以上纯属个人理解
offset--->偏移 next--->下一个