日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Oracle中RowNum的用法

發(fā)布時間:2023/12/15 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 Oracle中RowNum的用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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,所以去掉,其后記錄補上,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

補充:選擇特定分類新聞的分頁例子

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。