SQL 分頁查詢的幾種方式

2022-07-10 01:57:16 字數 2041 閱讀 5486

最近維護乙個老專案,專案需要分頁取資料,之前很久都用ef框架開發,突然要用sql分頁有點茫然,於是總結了一些sql server sql分頁的思路,以便加深記憶。

一:用top排序的方式

1

declare

@pagesize

int=202

declare

@pageindex

int=23

4select

top ( @pagesize)5

*6from ( select

top ( @pagesize

*@pageindex)7

*8from

test

9order

by userid asc

10) table1

11order

by table1.userid desc

二:用字段 not in的方式

1

declare

@pagesize

int=202

declare

@pageindex

int=23

4select

top ( @pagesize)5

*6from

dbo.test

7where userid not

in ( select

top ( @pagesize

* ( @pageindex-1

) )8

userid

9from

dbo.test

10order

by userid asc)11

order

by dbo.test.userid asc

三:用字段大小範圍的判斷的方式

1

declare

@pagesize

int=202

declare

@pageindex

int=13

4select

top ( @pagesize)5

*6from

dbo.test

7where userid > ( select

isnull(max(userid), 0)8

from ( select

top ( @pagesize

* ( @pageindex-1

) )9*10

from

dbo.test

11order

by userid asc

12) table113)

14order

by dbo.test.userid asc

四:row_number 方式

1

declare

@pagesize

int=202

declare

@pageindex

int=23

4declare

@start

int=

@pagesize

* ( @pageindex

-1 ) +15

declare

@end

int=

@pagesize

*@pageindex67

select*8

from ( select row_number() over ( order

by userid ) as

rownumber ,9*

10from

dbo.test

11) table1

12where rownumber between

@start

and@end

總結:以上四種方式自己沒有親測具體的查詢效率,根據網上的說法,第四種方式的效率應該是最慢的,但它也是最通用的,因為前三種方式必須有可排序的字段,如果沒有可排序的字段比如(guid 主鍵),這時用row_number 方式則可以解決。

SQL Server分頁查詢的幾種方式

sql server中分頁查詢 1 第一種寫法,僅支援sql server2005後的 row nubmer over order by asc desc select from select row number over order by studentno as myid from stude...

SQL查詢的幾種方式

1 左連線 left join 或者 left outer join 2 左連線 table a表資料全部顯示,table b根據條件匹配table a 匹配上顯示,否則顯示null 3 select from table a 4 select from table b 5 select from ...

SQL查詢的幾種方式

1 左連線 left join 或者 left outer join 2 左連線 table a表資料全部顯示,table b根據條件匹配table a 匹配上顯示,否則顯示null 3 select from table a 4 select from table b 5 select from ...