SQL 實現分頁查詢

2021-09-22 20:49:51 字數 1989 閱讀 1836

原文:

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

@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)

二.通過row_number() 來實現分頁查詢1.不用主鍵也可以查詢,通過row_number來為沒乙個查詢的資料標記上行號,然後在所標記的行號上進行分組取行。

declare

@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)

三.小tips1.起初在寫部落格的時候,其實還想過另一種方法,不防可以提出來,大家來看看這段sql.

select

top(@pagesize) *

from person where id >(select

top((@pageindex

-1)*

@pagesize) max(id) from person)

2.下面是前面3個sql執行的結果.

note: 第三個sql是沒有資料的。對於第三條sql,原理是先取出前面頁數中最大的id為maxid,然後取出id大於maxid的資料,取出前面的pagesize行,看起來的確沒問題,可是最後一條資料都沒有,這是為什麼呢,問題出在了下面這半句sql

select

top((@pageindex

-1)*

@pagesize) max(id) from person

note:因為id是主鍵自己增加,在呼叫max(id)的是其實區的是當前最大的id. (對於當前情況max(id)始終是10,所以沒資料)

四.總結:

有關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條倒序,再查出這倒序後的前十條,最後把這十條倒序就是...