關於Oracle中偽列rownum的使用簡介

2021-06-26 06:50:45 字數 993 閱讀 7157

由於之前沒有注意過rownum的介紹,對其認識僅僅是知道可以通過它來進行一些簡單的資料篩選、分頁等功能,最近在對其進行條件查詢篩選時,發現得到的並不是想要的資料,檢視了一些其他的文件,現在想簡單的介紹一下使用該偽列時,應當注意的事項。

示例如下: 

從表中查詢有以下資料

當時想選擇出開始時間(start_time)最大的一條資料記錄,於是執行了如下的sql,結果發現所找的並不是希望的資料;

> select  t.* from t_example_info t  where rownum = 1 order by t.start_time desc;

當時很是不解,於是檢視了一些文件介紹:oracle中的rownum的是在取資料的時候產生的序號,它是系統按照記錄被取出時給記錄編的號,而不是把資料取出並排序,然後再進行對記錄集合編號,也就是rownum的產生是在order by的操作之前就已經確定了的,因此導致order by 語句失效,所以無法得到想要的結果。

當知道了rownum產生的原理之後,上面的問題就自然而然的解決了。

select  s.*  from (select t.* from t_example_info t order by t.start_time desc) s where rownum = 1;

同時還應注意的有:

1)rownum不能使用任何表的名稱作為字首,它是oracle系統自帶的;

2)rownum的值是從1開始的,若直接對其做rownum>=n(n>1)的條件篩選時,認為rownum>=n返回的結果是false,從而查詢並不會有結果返回;

總之,只要記著rownum的值是在查詢出的結果後產生的,並且起始值是1開始的就ok了!!! 

ORACLE中的偽列

oracle 中的偽列 偽列就像表中的列一樣,但是在表中並不儲存。偽列只能查詢。不能進行增刪改工作。rownum與rowid不同,rowid是插入記錄時生成,rownum是查詢資料時生成。rowid標識的是行的實體地址。rownum標識的是查詢結果中的行的次序。1.rowid 表中的每一行記錄都有乙...

Oracle中的偽列

分頁查詢中,需要用到偽列rownum,如下 select from select rownum rn,name from cost where rownum 6 where rn 3 可是第一次用rownum,第二次用rn,位置不能變,否則出錯,第一次的rownum是oracle中的乙個虛擬列,rn...

Oracle中的偽列

分頁查詢中,需要用到偽列rownum,如下 select from select rownum rn,name from cost where rownum 6 where rn 3 可是第一次用rownum,第二次用rn,位置不能變,否則出錯,第一次的rownum是oracle中的乙個虛擬列,rn...