Oracle中RowNum的用法
RowNum是對結(jié)果集加的一個偽列,即先查到結(jié)果集之后再加上去的一個列 (先要有結(jié)果集)。
簡單的說,RowNum 是對符合條件結(jié)果的序列號,它總是從1開始排起的。
實例1:
Select TableId,TableData From TableName Where RowNum > 1
以上語句沒有查詢記錄。
因為第一條不滿足去掉的話,第二條的RowNum又成了1,所以永遠(yuǎn)沒有滿足條件的記錄。
或者可以這樣理解:RowNum是一個序列,是Oracle數(shù)據(jù)庫從數(shù)據(jù)文件或緩沖區(qū)中讀取數(shù)據(jù)的順序。它取得第一條記錄則RowNum值為1,第二條為2,依次類推。因為從緩沖區(qū)或數(shù)據(jù)文件中得到的第一條記錄的RowNum為1,則被刪除,接著取下條,可是它的RowNum還是1,又被刪除,依次類推,便沒有了數(shù)據(jù)。
實例2:
select TableId,TableData from TableName where RowNum < 10
select TableId,TableData from TableName where RowNum != 10
以上兩條語句查詢出來的記錄相同。
因為是在查詢到結(jié)果集后,顯示完第9條記錄后,之后的記錄也都是 != 10,或者 >=10,所以只顯示前面9條記錄。
也可以這樣理解,RowNum為9后的記錄的RowNum為10,因條件為 !=10,所以去掉,其后記錄補(bǔ)上,RowNum又是10,再被去掉,這樣就只會顯示前9條記錄了。
實例3:
Select TableId,TableData From TableName Where RowNum Between Number And 10
當(dāng)Number大于1時沒有查詢記錄。原因同上(RowNum總是從1開始)。
實例4:
如果就是想要用RowNum > 10這種條件的話就要用嵌套語句,把RowNum先生成,然后對它進(jìn)行查詢。
Select * From
(Select RowNum as RN,TableId,TableData From TableName)
Where RN > 10
一般對結(jié)果集進(jìn)行分頁就是這樣做的。
附:
關(guān)于別名:
Select TableId,TableData as 中文別名 From TableName Where 中文別名 Like '%NameKey%',會提示“‘中文別名’:標(biāo)識符無效”
可以改成:
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:這兩句的前六項為什么不一樣?
A:把RowNum加入查詢,可以看出記錄的RowNum并不是按順序排列,即RowNum是在排序之前產(chǎn)生的(據(jù)聞以記錄插入順序排的號)。如要實現(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ǔ)充:選擇特定分類新聞的分頁例子
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的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb 字符串 截取_Mongo
- 下一篇: openwrt信号弱掉线_斐讯 FIR1