亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

sqlServer實現分頁查詢的方式有哪些

發布時間:2023-03-02 13:52:17 來源:億速云 閱讀:109 作者:iii 欄目:開發技術

今天小編給大家分享一下sqlServer實現分頁查詢的方式有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

sqlServer的分頁查詢和mysql語句不一樣,有三種實現方式。分別是:offset /fetch next、利用max(主鍵)、利用row_number關鍵字

一、offset /fetch next關鍵字

2012版本及以上才有,SQL server公司升級后推出的新方法。

公式:

-- 分頁查詢公式-offset /fetch next
select * from 表名
order by 主鍵 或 其他索引列 
-- @pageIndex:頁碼、@pageSize:每頁記錄數
offset ((@pageIndex-1)*@pageSize) rows
fetch next @pageSize rows only;

示例:

-- 分頁查詢第2頁,每頁有10條記錄
select * from tb_user
order by uid
offset 10 rows
fetch next 10 rows only ;

說明:

offset 10 rows ,將前10條記錄舍去,fetch next 10 rows only ,向后再讀取10條數據。

二、利用max(主鍵)

公式:

-- 分頁查詢公式-利用max(主鍵)
select top @pageSize * 
from 表名 
where 主鍵>=
(select max(主鍵) 
	from (
		select top ((@pageIndex-1)*@pageSize+1) 主鍵
		from 表名  
		order by  主鍵 asc) temp_max_ids) 
order by 主鍵;

示例:

-- 分頁查詢第2頁,每頁有10條記錄
select top 10 * 
from tb_user 
-- 3、再重新在這個表查詢前10條,條件: id>=max(id)
where uid>=
-- 2、利用max(id)得到前11條記錄中最大的id
(select max(uid) 
	from (
		-- 1、先top前11條行記錄
		select top 11 uid
		from tb_user 
		order by  uid asc) temp_max_ids) 
order by uid;

說明:

先top前11條行記錄,然后利用max(id)得到最大的id,之后再重新在這個表查詢前10條,不過要加上條件,where id>=max(id)。

中心思想:其實就是先得到該頁的初始id,PS:別忘了加上排序哦

三、利用row_number關鍵字

這種方式也是比較常用的,直接利用row_number() over(order by id)函數計算出行數,選定相應行數返回即可,不過該關鍵字只有在SQL server 2005版本以上才有。

公式:

-- 分頁查詢公式-row_number()
select top @pageSize * 
from (
	-- rownumber是別名,可按自己習慣取
	select row_number() over(order by 主鍵 asc) as rownumber,* 
	from 表名) temp_row
where rownumber>((@pageIndex-1)*@pageSize);

示例:

-- 分頁查詢第2頁,每頁有10條記錄
select top 10 * 
from (
	-- 子查詢,多加一個rownumber列返回
	select row_number() over(order by uid asc) as rownumber,* 
	from tb_user) temp_row
	--限制起始行標
where rownumber>10;

說明:

利用row_number函數給每行記錄標了一個序號,相當于在原表中多加了1列返回。

上述示例,是以序號11為起始行,查詢前10條記錄,即為第2頁數據。

sqlServer實現分頁查詢的方式有哪些

優化:

可以看到,子查詢查詢了全表數據,如果數據量大,效率是比較低的。

下面是優化后的SQL,

公式:

-- 分頁查詢公式-row_number()-優化版本
select * 
from (
	-- rownumber是別名,可按自己習慣取
	select top (@pageIndex*@pageSize) row_number() over(order by 主鍵 asc) 
	as rownumber,* 
	from 表名) temp_row
where rownumber>((@pageIndex-1)*@pageSize);

示例:

-- 分頁查詢第2頁,每頁有10條記錄
select * 
from (
	-- 子查詢,限制了返回前20條數據
	select top 20 row_number() over(order by uid asc) as rownumber,* 
	from tb_user) temp_row
	--限制起始行標
where rownumber>10;

說明:

這里,子查詢僅查詢到當前頁的最后一行,沒有進行全表查詢,所以效率上要快一點。在外層限制起始行標,是沒變的,但是卻在內層控制了結尾行標。

上述示例,是以序號11為起始行,查詢20以內的記錄,即為第2頁數據。

以上就是“sqlServer實現分頁查詢的方式有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉安市| 平安县| 九江县| 乌苏市| 墨竹工卡县| 格尔木市| 汉阴县| 富顺县| 上思县| 景洪市| 宿松县| 保亭| 青田县| 彰武县| 汶川县| 交口县| 桃江县| 张家川| 岗巴县| 泗洪县| 双峰县| 新营市| 崇仁县| 廉江市| 宜昌市| 郑州市| 临澧县| 南岸区| 丰城市| 富锦市| 绥滨县| 巴林左旗| 溧水县| 香格里拉县| 砚山县| 博兴县| 淮安市| 子洲县| 浦江县| 拉萨市| 本溪|