Oracle中RowNum的用法
RowNum是對(duì)結(jié)果集加的一個(gè)偽列,即先查到結(jié)果集之后再加上去的一個(gè)列 (先要有結(jié)果集)。
簡(jiǎn)單的說(shuō),RowNum 是對(duì)符合條件結(jié)果的序列號(hào),它總是從1開(kāi)始排起的。
實(shí)例1:
Select TableId,TableData From TableName Where RowNum > 1
以上語(yǔ)句沒(méi)有查詢記錄。
因?yàn)榈谝粭l不滿足去掉的話,第二條的RowNum又成了1,所以永遠(yuǎn)沒(méi)有滿足條件的記錄。
或者可以這樣理解:RowNum是一個(gè)序列,是Oracle數(shù)據(jù)庫(kù)從數(shù)據(jù)文件或緩沖區(qū)中讀取數(shù)據(jù)的順序。它取得第一條記錄則RowNum值為1,第二條為2,依次類推。因?yàn)閺木彌_區(qū)或數(shù)據(jù)文件中得到的第一條記錄的RowNum為1,則被刪除,接著取下條,可是它的RowNum還是1,又被刪除,依次類推,便沒(méi)有了數(shù)據(jù)。
實(shí)例2:
select TableId,TableData from TableName where RowNum < 10
select TableId,TableData from TableName where RowNum != 10
以上兩條語(yǔ)句查詢出來(lái)的記錄相同。
因?yàn)槭窃诓樵兊浇Y(jié)果集后,顯示完第9條記錄后,之后的記錄也都是 != 10,或者 >=10,所以只顯示前面9條記錄。
也可以這樣理解,RowNum為9后的記錄的RowNum為10,因條件為 !=10,所以去掉,其后記錄補(bǔ)上,RowNum又是10,再被去掉,這樣就只會(huì)顯示前9條記錄了。
實(shí)例3:
Select TableId,TableData From TableName Where RowNum Between Number And 10
當(dāng)Number大于1時(shí)沒(méi)有查詢記錄。原因同上(RowNum總是從1開(kāi)始)。
實(shí)例4:
如果就是想要用RowNum > 10這種條件的話就要用嵌套語(yǔ)句,把RowNum先生成,然后對(duì)它進(jìn)行查詢。
Select * From
(Select RowNum as RN,TableId,TableData From TableName)
Where RN > 10
一般對(duì)結(jié)果集進(jìn)行分頁(yè)就是這樣做的。
附:
關(guān)于別名:
Select TableId,TableData as 中文別名 From TableName Where 中文別名 Like '%NameKey%',會(huì)提示“‘中文別名’:標(biāo)識(shí)符無(wú)效”
可以改成:
Select * From (Select TableId,TableData as 中文別名 From TableName) Where 中文別名 Like '%NameKey%'
關(guān)于排序:
Select UserId,UserName from BS_User where rownum<=6 order by UserId ASC
Select UserId,UserName from BS_User where rownum<=10 order by UserId ASC
Q:這兩句的前六項(xiàng)為什么不一樣?
A:把RowNum加入查詢,可以看出記錄的RowNum并不是按順序排列,即RowNum是在排序之前產(chǎn)生的(據(jù)聞以記錄插入順序排的號(hào))。如要實(shí)現(xiàn)按UserId排序后再取前N(10)條記錄,可以用嵌套查詢(先排序再取):
Select UserId,UserName From (Select UserId,UserName From BS_User Order By UserId ASC) Where RowNum <= 10
或者在Order By的字段上加索引。
參考文章:http://www.cnblogs.com/temptation/archive/2007/05/16/748897.html
補(bǔ)充:選擇特定分類新聞的分頁(yè)例子
select newsid,title,createdate
from(
select rownum as oindex,newsid,title,createdate
from
(
select un.newsid,un.title,un.createdate from ui_news un
inner join newstype nt on nt.newsid = un.newsid
where nt.typeid = :typeid and un.disable = 0 order by un.createdate desc
)
where rownum < :oendindex
)
where oindex>= :ostartindex
總結(jié)
以上是生活随笔為你收集整理的Oracle中RowNum的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mongodb 字符串 截取_Mongo
- 下一篇: CHBTC