今天閑來沒有多少事情,又想對Linux系統進行瞭解一下,當然,主要是針對工程大部分需要部署到上面,就先從資料庫著手了,當然兩者沒有多少關係,只是自己的一個順序罷了。
今天總算是對這個ROWNUM比較的瞭解。當然這個應該是早就應該瞭解了的,到現在才清楚一點的認識,也算是有點慚愧吧,
平時在寫分頁的時候,幾乎每一條都用到了ROWNUM,除非是查出資料處理的除外,但是對它都沒有一個很好的認識。
首先:ROWNUM就是一個偽列,它是要先產生,在使用,所以如果是再寫語句的時候,寫錯亂了就會出現問題。
第一:比如寫一個最簡單的,SELECT ROWNUM AS RN, TBL.* FROM TBL,看出點什嗎?就跟語句跟它加了一個編號而已,
這個編號是一偽編號,當然可能是我的理解還不夠到位,不過多寫語句之後,還是理解出了一點點。
第二:又來一條SELECT ROWNUM AS RN , TBL.* FROM TBL WHERE RN>0 AND RN<10
和SELECT ROWNUM AS RN , TBL.* FROM TBL WHERE ROWNUM>0 AND ROWNUM<10,顯然了吧,RN是無效的字元。
這裡就可以聲明一點就是,一切資料都是從表當中來的,如果你想憑空產生一些,你就要先聲明,插入你的結果集當中,
比如:SELECT 'CUSTOM' AS CUSTOM, TBL.* FROM TBL就會出現常量欄位,並且所有值都是CUSTOM,只不過這個ROWNUM是oracle的一個資料量給使用者使用而已,
在使用的時候,也得先得到資料,他會給你自動排文,(所以這個還是有一個很好的功能,這裡雖然說得不倫不類,只是自己的原因,
因為你在寫的時候,比如第二點的第二條語句,他就會出來資料,這是為什嗎?就是可以在後面使用)而不用你去寫什麼函數啊,
之類的來自己排列一樣。所以對於大於(>),小於(<),包括加上等於之類的
都需要注意一下原理就可以了,就跟網上說的很多一樣,為什麼會寫>1的時候,沒有資料,
在itput上看到一個很久以前的說法,覺得很好==
OWNUM是一個序列,是oracle資料庫從資料檔案或緩衝區中讀取資料的順序。它取得第一條記錄則rownum值為1,第二條為2,依次類推。如果你用>,>=,=,between...and這些條件,因為從緩衝區或資料檔案中得到的第一條記錄的rownum為1,則被刪除,接著取下條,可是它的rownum還是1,又被刪除,依次類推,便沒有了資料。
,其實在理解了它是偽列,使用的時候,先查詢,後來選擇列就沒問題了,比如:
select *
from (selet rownum as rn,t1.* from a where ...)
where rn >10一切搞定。當然,語句寫多了,稍微思考一點點,也是可行的。