最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

sqlServer實現(xiàn)分頁查詢的三種方式

 更新時間:2023年03月02日 12:03:03   作者:格子衫111  
在SqlServer中分頁查詢是經(jīng)常用到的查詢語句,一個好的分頁查詢語句,不能將代碼省略,下面這篇文章主要給大家介紹了關于sqlServer實現(xiàn)分頁查詢的三種方式,需要的朋友可以參考下

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

一、offset /fetch next關鍵字

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

公式:

-- 分頁查詢公式-offset /fetch next
select * from 表名
order by 主鍵 或 其他索引列 
-- @pageIndex:頁碼、@pageSize:每頁記錄數(shù)
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條數(shù)據(jù)。

二、利用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)函數(shù)計算出行數(shù),選定相應行數(shù)返回即可,不過該關鍵字只有在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函數(shù)給每行記錄標了一個序號,相當于在原表中多加了1列返回。

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

優(yōu)化:

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

下面是優(yōu)化后的SQL,

公式:

-- 分頁查詢公式-row_number()-優(yōu)化版本
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條數(shù)據(jù)
	select top 20 row_number() over(order by uid asc) as rownumber,* 
	from tb_user) temp_row
	--限制起始行標
where rownumber>10;

說明:

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

上述示例,是以序號11為起始行,查詢20以內(nèi)的記錄,即為第2頁數(shù)據(jù)。

總結

更多介紹,可查看我的另外篇文章:SQL Server中row_number函數(shù)用法介紹

到此這篇關于sqlServer實現(xiàn)分頁查詢的三種方式的文章就介紹到這了,更多相關sqlServer分頁查詢實現(xiàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

乐平市| 城步| 张家港市| 大邑县| 同德县| 蚌埠市| 北辰区| 南投县| 桑日县| 济阳县| 大竹县| 新竹县| 酉阳| 龙海市| 康定县| 鄂托克前旗| 根河市| 万年县| 龙口市| 吉水县| 五原县| 长乐市| 江山市| 新绛县| 肃宁县| 唐海县| 仲巴县| 桂阳县| 靖宇县| 呼伦贝尔市| 泰州市| 延边| 昭觉县| 临泉县| 乌兰县| 达孜县| 井冈山市| 鄂托克前旗| 利辛县| 德江县| 启东市|