數(shù)據(jù)庫(kù)返回表中的前N行記錄
發(fā)布時(shí)間:
2022-03-15
實(shí)際應(yīng)用環(huán)境中,用戶經(jīng)常需要獲取查詢的前N行記錄,或數(shù)據(jù)表的前N行。在MST-SQL中,定義了TOP N關(guān)鍵字來(lái)實(shí)現(xiàn),TOP參數(shù)的作用是用來(lái)限制返回到結(jié)果集中的記錄的數(shù)目,而Oracle PL/SQL不支持該關(guān)鍵字。
本實(shí)例對(duì)學(xué)生表STU進(jìn)行查詢,返回該表的前3行記錄,在SQL*Plus中執(zhí)行后,其返回結(jié)果如圖1所示。

圖1 返回表中的前N行記錄
【實(shí)現(xiàn)代碼】

【范例解析】
本實(shí)例中同樣使用了游標(biāo)ROWNUM來(lái)實(shí)現(xiàn)獲取表的前N行記錄。事實(shí)上,ROWNUM是對(duì)查詢結(jié)果集加的一個(gè)偽列,其需要先查詢到結(jié)果集。簡(jiǎn)單地說(shuō),ROWNUM是符合條件的結(jié)果集的序號(hào),其從1開(kāi)始。
需要讀者注意的是,ROWNUM的使用只能用<、<=和!=等比較運(yùn)算符,不能用>、>=等運(yùn)算符,這是因?yàn)镽OWNUM從自然數(shù)1開(kāi)始,Oracle認(rèn)為ROWNUM>n(n>1)這種條件是不成立的,因此使用>、>=等運(yùn)算符是無(wú)法返回?cái)?shù)據(jù)記錄的。同樣的,此處可以使用<=和!=運(yùn)算符對(duì)上述實(shí)現(xiàn)SQL語(yǔ)句進(jìn)行改寫(xiě):

或

事實(shí)上,Oracle中經(jīng)常使用ORDER BY子句與ROWNUM組合來(lái)實(shí)現(xiàn)獲取查詢的前N行記錄,即先用ORDER BY子句排序,再使用ROWNUM取出排在前面的N行記錄。
注意:ROWNUM從自然數(shù)1 開(kāi)始,因此條件“ROWNUM=1”是成立的,其可以作為WHERE子句的條件并返回表的第1行記錄,但“ROWNUM=n(n>1)”是不成立的,不能作為條件直接寫(xiě)在WHERE子句中,否則無(wú)法返回正確結(jié)果。
上一篇:
數(shù)據(jù)段是什么
下一篇:
數(shù)據(jù)庫(kù)根據(jù)查詢結(jié)果創(chuàng)建和復(fù)制表