學習SqlServer到現在快兩年了吧,分頁查詢總是忘了看筆記,看了又忘。之前用的分頁都是row_number函數的方式,背不住。。。直到今天,看到別人寫的另一種分頁寫法,看似比row_number簡單。好記。。。 分頁原理:越過多少條,取多少條 以前用的row_number函數的方式也記錄一下吧 ...
學習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<=30View Code
論上面兩者的效率的話,數據量不是很大的時候也都差不多吧,數據量大的時候也許row_number更高效些。第一種方式取前面部分和後面部分的數據比較高效,如果說數據量很大用第一種方式取中間部分數據的話相對來說比較慢的。
row_number函數分頁相對來說比較通用
剛剛搜索引擎查了下分頁方法,沒想到還有其他方法。。在這也記一下吧,雖然對其還不是很理解,有時間在看看相關資料瞭解一下
--跳過多少條,取多少條 offset 需要跳過的條數 rows fetch next 每頁取的條數 rows only select * from City order by CityId offset 5 rows fetch next 5 rows only
查詢結果:
這個分頁方法我對它的理解是 offset(需要跳過的條數) 假設一頁分10條,你當前是第三頁那麼就填(3*10)當前頁*每頁的條數,next (每頁的條數),如果每頁顯示10條,那麼就是 next 10
以上純屬個人理解
offset--->偏移 next--->下一個