SqlServer 三種分頁查詢語句

2022-04-30 09:18:10 字數 1625 閱讀 2609

先說好吧,查詢的資料排序,有兩個地方(1、分頁前的排序。2、查詢到當前頁資料後的排序)

1、 先查詢當前頁碼之前的所有資料id

select top ((當前頁數-1)*每頁資料條數) id from 表名

2、再查詢所有資料的前幾條,但是id不在之前查出來的資料中

select top 每頁資料條數 * from 表名 where id not in ( select top ((當前頁數-1)*每頁資料條數) id from 表名 )

3、查詢出當前頁面的所有資料後,再根據一列資料進行排序

select * from (

select top 每頁資料條數 * from 表名 where id not in (select top ((當前頁數-1)*每頁資料條數) id from 表名)

) as b order by 排序列名 desc

4、當然,如果想要修改排序列再查詢也可以(預設是按照id asc 排序的,我們可以改為其他列)

select top 每頁資料條數 * from 表名 where id not in (select top ((2-1)*5) id from wg_users order by 排序列名 desc) order by 排序列名 desc

這裡的排序列名一定要用同一列,不然的話,分頁查詢就會查出重複資料或者少資料,因為排序錯亂的原因

1、使用row_number()函式先給查詢到的所有資料新增一列序號(就是給資料加一列1、2、3、4、5......這個,一定不要去掉後面起的那個別名【我這裡叫做b】)

select * from (select row_number() over(order by id) as rownumber,* from 表名) as b

2、然後就是根據前面加的那一列序號,運用數學計算出當前頁是 第x 到 y條 資料

select * from (select row_number() over(order by id) as rownumber,* from 表名) as b

where b.rownumber between (當前頁數-1)*每頁資料條數+1 and 當前頁數*每頁資料條數order by 排序列名 desc

3、這種分頁語句的排序列在這裡(這裡預設根據id這一列排序的,有需要的可以改一下,多個排序列可以寫【order by id, creattime, name, ......】)

select * from (select row_number() over(order by 排序列名) as rownumber,* from 表名) as b

1、這種分頁相較於第二種來說,無論是效能還是語法,都是有優勢的,不過優勢並不明顯(僅供參考,看別人測試的,萌新表示並不知道該怎麼比較-_-!!)

select * from 表名 order by 排序列名 offset (當前頁數-1)*每頁資料條數 row fetch next 每頁資料條數 row only

2、對當前頁的資料再排序(如果不需要,可以不用加這部分)

select * from (

select * from 表名 order by 排序列名 offset (當前頁數-1)*每頁資料條數 row fetch next 每頁資料條數 row only

) as b order by 排序列名 desc

sqlserver三種分頁查詢方法

假設有表student,每頁顯示10條記錄,查詢第5頁的內容。from student where idnotin 40是這麼計算出來的 10 5 1 select top 40 idfrom student order byid order by id原理 需要拿出資料庫的第5頁,就是40 50條...

SQL Server的三種分頁方式

目前常見的三種sql分頁方式 top not in方式 select top 條數 from tablename where id not in select top 條數 頁數 id from tablename row number over 方式 select from select row ...

SQL server分頁的三種方法

var datacount test.orderby t t.testid skip pagesize pageindex 1 take pagesize tolist select top 需要顯示的條目數 from dbtest where testid notin select top 需要剔...