亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有大佬知道,oracle中的rownum 是什么時候產生的?求解釋!

有大佬知道,oracle中的rownum 是什么時候產生的?求解釋!

HUWWW 2021-08-25 19:15:00
oracle 中的rownum 是什么時候產生的?在一個查詢語句中select a,*, rownum from testgroup by a.sysid等到的rownum并不是按順序排的。
查看完整描述

3 回答

?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

rownum是在你操作數據的時候,會默認生成一個序號從1開始,一直到記錄的總條數,數字不會跳躍。

幾種常見的用法:

  1. select rownum,c1 from t1 where rownum != 10 返回的結果是前9條,原因很簡單,取出來前9條后,跳過第10條,后面的會繼續補充第10條,這樣一直到結尾都還是第十條,不滿足條件,也就是前面的 9條。

  2. select rownum,c1 from t1 where rownum  between 1 and 10;查詢的結果是1到10條,從序號1到10的數據。

  3. select rownum,c1 from t1 where rownum  between 2 and 10;查詢結果為空,因為跳過第一條,下一條記錄繼續rownum為1.一直到數據結束也還是1.也就不存在從2開始的數據。


查看完整回答
反對 回復 2021-08-30
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

在我說什么時候產生的之前,我想說一下SELECT這個查詢語句的執行順序問題:
語法是:
select * from table_name
where conditons1
group by some_column
having conditions2
order by some_column;
執行時是這樣的:先從表中查詢出所有的數據,然后conditions1中篩選出符合條件的數據,然后對數據進行分組,having是對分組后的數據進行篩選,最后進行排序,不過聚合函數與group by一起出現時,聚合函數會后執行.
明白這個之后,rownum這個偽列就不可能會在where之后出現,所以不管查詢有什么條件,在完成
select * from table_name這個時候,它就出現了,就會在表的每一行上按順序加上rownum.
比如你說的這個查詢如果想按順序出現rownum應該這樣寫:
select a.*,rownum a_rownum from(
select * from test group by a.sysid
) a;
當然了里面的子查詢要正確;
如果說你想對test表中的數據查詢出來之后,按SYSID這一列進行排序后查詢3到5條數據,類似于小數據量(千萬條以內)的先排序后分頁:語句可以這樣寫
select * from (
select a.*,rownum t_rownum from (
select * from test order by sysid
)
) where t_rownum between 3 and 5;
總之就是說:select a.* ,rownum a_rownum from table_name a時就會在列上按順序加上rownum.



查看完整回答
反對 回復 2021-08-30
  • 3 回答
  • 0 關注
  • 459 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號