原文:
sql--實現分頁查詢
在查詢資料中,對於某些資料量過大,為了減少頁面上單頁的載入時間,我們常常會選擇分頁查詢,分頁查詢有很多方法,下面主要介紹兩種分頁方法。
一. 通過主鍵來實現分頁:
1.資料庫背景. person表,id主鍵盤,自增1,varchar行name.
2.裡面包含了10條資料。
3. 可以通過唯一id,來進行分頁.
note:select top((@pageindex-1)*@pagesize) id from person
查詢出前面所有的資料的id. 然後父查詢,通過not in 將已經查詢過的id排除。
declare二.通過row_number() 來實現分頁查詢1.不用主鍵也可以查詢,通過row_number來為沒乙個查詢的資料標記上行號,然後在所標記的行號上進行分組取行。@pageindex
intdeclare
@pagesize
intset
@pageindex=2
set@pagesize=3
select
top(@pagesize) *
from person with(nolock) where id not
in(select
top((@pageindex
-1)*
@pagesize) id from person)
declare三.小tips1.起初在寫部落格的時候,其實還想過另一種方法,不防可以提出來,大家來看看這段sql.@pageindex
intdeclare
@pagesize
intset
@pageindex=2
set@pagesize=3
select
top(@pagesize) a.id,a.name from (select row_number() over(order
by id) as rownumber,*
from person with(nolock)) a where a.rownumber>((@pageindex
-1)*
@pagesize)
select2.下面是前面3個sql執行的結果.top(@pagesize) *
from person where id >(select
top((@pageindex
-1)*
@pagesize) max(id) from person)
note: 第三個sql是沒有資料的。對於第三條sql,原理是先取出前面頁數中最大的id為maxid,然後取出id大於maxid的資料,取出前面的pagesize行,看起來的確沒問題,可是最後一條資料都沒有,這是為什麼呢,問題出在了下面這半句sql
selectnote:因為id是主鍵自己增加,在呼叫max(id)的是其實區的是當前最大的id. (對於當前情況max(id)始終是10,所以沒資料)top((@pageindex
-1)*
@pagesize) max(id) from person
四.總結:
有關max(id)還請了解這方面的解釋一下為何是最大的id.小弟也只是在寫sql的時候發現的. 對原理不熟悉。求各位博友指點。
查詢分頁的SQL實現
select top 10userinfo.user name,plan date,plan week,plan week day,plan week text from week plan inner join userinfo on userinfo.userid week plan.useri...
SQL實現分頁查詢方法總結
開發過程中經常遇到分頁的需求,今天在此總結一下吧。簡單說來方法有兩種,一種在源上控制,一種在端上控制。源上控制把分頁邏輯放在sql層 端上控制一次性獲取所有資料,把分頁邏輯放在ui上 如gridview 顯然,端上控制開發難度低,適於小規模資料,但資料量增大時效能和io消耗無法接受 源上控制在效能和...
SQL分頁查詢
分頁sql查詢在程式設計的應用很多,主要有儲存過程分頁和sql分頁兩種,我比較喜歡用sql分頁,主要是很方便。為了提高查詢效率,應在排序欄位上加索引。sql分頁查詢的原理很簡單,比如你要查100條資料中的30 40條,你先查詢出前40條,再把這30條倒序,再查出這倒序後的前十條,最後把這十條倒序就是...