溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Sqlserver的SQL語(yǔ)句實(shí)現(xiàn)分頁(yè)查詢(xún)

發(fā)布時(shí)間:2020-08-27 03:25:12 來(lái)源:網(wǎng)絡(luò) 閱讀:1398 作者:宇宙小元帥 欄目:關(guān)系型數(shù)據(jù)庫(kù)

在應(yīng)用程序的開(kāi)發(fā)中,如果數(shù)據(jù)庫(kù)中的數(shù)據(jù)量過(guò)于的龐大,則需要針對(duì)查詢(xún)數(shù)據(jù)做分頁(yè)處理,取出對(duì)應(yīng)分頁(yè)中的數(shù)據(jù),在Sqlserver分頁(yè)的語(yǔ)句寫(xiě)法中,有兩種比較常用,一種是數(shù)據(jù)表中含有自增量Id的情況,可以根據(jù)Id的大小順序進(jìn)行分頁(yè),另一種是數(shù)據(jù)庫(kù)中不存在Int類(lèi)型的Id的情況,此時(shí)就需要通過(guò)Row_Number函數(shù)來(lái)實(shí)現(xiàn)分頁(yè)。

(1)數(shù)據(jù)表中存在自增量Id的情況

假設(shè)我們查詢(xún)的表名稱(chēng)為Student,包含的字段有:Id(Id號(hào),自增變量)、Name(姓名)、BirthDay(出生日期)。按出生日期從早到晚排序,獲取排序后第31到60個(gè)學(xué)生的信息,語(yǔ)句可以使用Select Top的方式書(shū)寫(xiě)。具體如下:

Select Top 30 * FROM Student Where Id Not In (Select Top 30 FROM Student Order By BirthDay) Order By BirthDay

如果是獲取第91到120排位的學(xué)生的話(huà),則是下列語(yǔ)句。

Select Top 30 * FROM Student Where Id Not In (Select Top 90 FROM Student Order By BirthDay) Order By BirthDay

(2)數(shù)據(jù)表中不存在Id的情況

此種情況不可能再使用top來(lái)排序了,可使用row_Number進(jìn)行排序后再篩選對(duì)應(yīng)的值。

更改上述的Student表的結(jié)構(gòu)為:StudentCode(文本類(lèi)型,非數(shù)字)、Name(姓名)、BirthDay(出生日期)。按出生日期從早到晚排序,獲取排序后第31到60個(gè)學(xué)生的信息,此時(shí)的SQL語(yǔ)句為:

With tempTb AS
(
Select ROW_NUMBER() OVER(order by BirthDay ASC) AS RowNumber, FROM Student
)
Select
FROM tempTb Where RowNumber>30 AND RowNumber<=60

在臨時(shí)表tempTb中使用了ROW_NUMBER() OVER來(lái)獲取排序后的序號(hào),Over里面為排序的規(guī)則。

備注:此文章最早發(fā)表于博主個(gè)人站,原文鏈接Sqlserver的SQL語(yǔ)句實(shí)現(xiàn)分頁(yè)查詢(xún)_IT技術(shù)小趣屋。

博主個(gè)人技術(shù)交流群:960640092,博主微信公眾號(hào)如下:
Sqlserver的SQL語(yǔ)句實(shí)現(xiàn)分頁(yè)查詢(xún)

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI