查詢分頁的幾種Sql寫法

2021-08-07 20:05:29 字數 2282 閱讀 8877

1.概述

在網頁中如果顯示的資料太多就會佔據過多的頁面,而且顯示速度也會很慢。為了控制每次在頁面上顯示資料的數量,就可以利用分頁來顯示資料。

2.技術要點

select top [pagesize] * from [table] where id not in(

select top [prenum] id from [table] order by id desc) order by id desc

a. pagesize:資料分頁的分頁大小。

c. table:資料表名稱。

例如要從資料庫的第10條資料開始查詢5條資料,編寫的 sql查詢語句如下:

"select top 5 * from tb_sqlserverfenye where id not in(

select top 10 id from tb_sqlserverfenye order by id desc) order by id desc";

在jdbcdao資料庫操作類的getpageargs()方法中就使用getproducts()方法中就使用了該語法獲取指定頁碼的分頁資料,關鍵**如下:

// 定義查詢資料庫的sql語句

string sql = "select top " + pagesize + " * from tb_sqlserverfenye" +

" where id not in(select top " + (page - 1) * pagesize + " id from" +

" tb_sqlserverfenye order by id desc) order by id desc";

stmt = conn.createstatement();

rs = stmt.executequery(sql); // 執行sql並獲取查詢結果集

.幾種典型的分頁sql,下面例子是每頁50條,198*50=9900,取第199頁資料。

--寫法1,not in/top

select top 50 * from pagetest

where id not in (select top 9900 id from pagetest order by id)

order by id

--寫法2,not exists

select top 50 * from pagetest

where not exists

(select 1 from (select top 9900 id from pagetest order by id)a where a.id=pagetest.id)

order by id

--寫法3,max/top

select top 50 * from pagetest

where id>(select max(id) from (select top 9900 id from pagetest order by id)a)

order by id

--寫法4,row_number()

select top 50 * from

(select row_number()over(order by id)rownumber,* from pagetest)a

where rownumber>9900

select * from

(select row_number()over(order by id)rownumber,* from pagetest)a

where rownumber>9900 and rownumber<9951

select * from

(select row_number()over(order by id)rownumber,* from pagetest)a

where rownumber between 9901 and 9950

--寫法5,在csdn上一帖子看到的,row_number() 變體,不基於已有字段產生記錄序號,先按條件篩選以及排好序,再在結果集上給一常量列用於產生記錄序號

select *

from (

select row_number()over(order by tempcolumn)rownumber,*

from (select top 9950 tempcolumn=0,* from pagetest where 1=1 order by id)a

)bwhere rownumber>9900

SQL 分頁查詢的幾種方式

最近維護乙個老專案,專案需要分頁取資料,之前很久都用ef框架開發,突然要用sql分頁有點茫然,於是總結了一些sql server sql分頁的思路,以便加深記憶。一 用top排序的方式 1 declare pagesize int 202 declare pageindex int 23 4sele...

sql 幾種分頁查詢的儲存過程

今天好好的找了下分頁的儲存過程,並測試了下,在此記下 第一種 alter proc dbo select colname pagesize int,currentpage int as select top pagesize colname from dbo.tablename where coln...

幾種SQL語句的寫法

1.一張表中有使用者資訊表user user id,nickname 另外一張表聯絡人表contact user id,friend id 現在要找出聯絡人的資訊 1 selectu1.nicknameasmyselft,u2.nicknameasfriendfromcontact cinnerjo...