SQLServer分頁查詢筆記


學習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
View 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--->下一個

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM