關於對ORACLE中的ROWNUM的理解

上一篇文章我們講:ORACLE巧用排序 查詢最大值,第二大,第三大值。。。第N大值。

這裏面sql經常使用到一個Oracle數據庫中的一個特性ROWNUM,從英文死翻譯過來就行號,正常理解就是查出來的數據,有一個額外的編碼,類似於excel左側對所有數據有一個行號標識。

因爲按照一般思維,我們在獲取最大值,第二大,第三大值。。。第N大值的時候,會自然的想到,對所有數據進行排序,然後根據ROWNUM=第幾,自然就會獲取到我們的數據。然而事實是這樣嗎?

我們簡單的測試一下:

select * from table where rownum = 1
select * from table where rownum = 2
select * from table where rownum = 3

。。。。

我們可以發現除了第一條sql查詢到了我們想要的數據,後面並沒有查詢出來數據,因此我們可以知道,rownum並不是簡單的表示行號。只要翻閱資料,我們 經常會發現這樣一個論斷,rownum無法使用大於某個數字進行查詢,從上面,我們也可以知道,除了0之外,rownum使用等於也是無效的。

那麼rownum到底是什麼呢?

rownum 是一個始終從1開始的,且符合查詢結果的序列號!

rownum始終從1開始,並給select查詢的結果進行編號,它不可能不存在第一行,而直接存在大於1的行數,因此,當rownum>大於1的數,或者rownum = 大於1的數的時候,這個時候,rownum無效,且結果並不存在。因而我們常用的rownum的方式是rownum<=某個數,只有取第一行數據的時候才使用rownum=1的方式。

那麼如何取第二行,第三行的數據呢?

同取第二大,第三大的方法一樣,對子查詢數據進行限制後,保證我們要取得數據處在最後一條,然後進行倒序排序,使其置爲第一條,即可使用rownum=1的方式獲取到數據。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章