SQL兩種簡單分頁查詢方式,sql分頁查詢方式
以前我們或許都用過了linq的skip and take方式進行分頁查詢,但是很少自己寫sql的分頁查詢,因為大多數時候,我們都是在調用別人的方法。
最近看到一個文檔,感覺方法裡面實現的分頁查詢進入資料庫調用的時候,實際最底層調用的還是SQL的分頁查詢,例如,我們用linq寫個分頁查詢,轉成sql運算式後發現:
實際調用的時候,才發現SQL底層是這樣進行分頁的。
下面,本文主要是介紹兩種SQL的分頁查詢。
一,TOP方式
----第一種分頁查詢方式:TOP方式 declare @page int=3 --當前頁面 declare @nums int=5 --每頁5條 select top (@nums) [Ar_id] ,[Ar_Title] from [ta_Article] where [Ar_id] not in (select top ((@nums)*(@page-1)) [Ar_id] from [ta_Article] order by [Ar_id]) order by [Ar_id]
top是選擇前多少行,在利用top分頁的時候,比如我們要取第3頁,每頁5條資料,這時候,我們可以先去掉前2頁的資料,然後用top選擇剩下資料的前5條。
二,ROW_NUMBER()方式
這種方式是從SQL SERVER 2008才開始支援的,是不是感覺挺高仿Oracle的~
--第二種分頁查詢方式:ROW_NUMBER()方式declare @pageNum int=3 --當前頁面declare @EachNums int=5 --每頁5條select * from( select [Ar_id] ,[Ar_Title],ROW_NUMBER() over(order by [Ar_id],[Ar_Title]) as 行號 from [ta_Article]) as t where t.行號 between (((@EachNums)*(@pageNum-1))+1) and (@pageNum)*(@EachNums)
使用Row_Number主要是根據行號進行分頁,最後一個between 判斷行號。
小結:
SQL分頁方式有很多種,在選擇如何分頁的時候,要考慮使用者比較常用的是前面的頁還是後面的頁,如果是比較靠前的頁,top方式還是不錯的。如果是靠後的,可以選擇rownumber;另外,有時候還是要綜合考慮。綜合考慮的時候,rownumber方式是比較常見的,也是效率比較好的。