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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle怎么获取行,在oracle中如何实现SELECT TOP N取得前几行记录

發布時間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle怎么获取行,在oracle中如何实现SELECT TOP N取得前几行记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在sql server中可以通過SELECT TOP N來取得想要結果的前幾行的信息。

但是在oracle中必須借助偽列rownum來完成

一個查詢語句在取得結果集后,偽列rownum就會從1開始,從上往下依次遞增。rownum是對結果集的編序排列。例如下表:

SQL> select id,name,salary,rownum from wages;

ID NAME ? ? ? ? ? SALARY ? ? ROWNUM

---------- ---------- ---------- ----------

1 zhangsan ? ? ? ? 3600 ? ? ? ? ?1

2 lisi ? ? ? ? ? ? 2500 ? ? ? ? ?2

3 wangwu ? ? ? ? ? 5000 ? ? ? ? ?3

4 zhaoliu ? ? ? ? ?4500 ? ? ? ? ?4

5 xiaoming ? ? ? ? 2000 ? ? ? ? ?5

所以取得該表的前三行,為

SQL> select id,name,salary,rownum from wages where rownum<=3;

ID NAME ? ? ? ? ? SALARY ? ? ROWNUM

---------- ---------- ---------- ----------

1 zhangsan ? ? ? ? 3600 ? ? ? ? ?1

2 lisi ? ? ? ? ? ? 2500 ? ? ? ? ?2

3 wangwu ? ? ? ? ? 5000 ? ? ? ? ?3

但是,這樣直接取表的前N行一般是無意義的。rownum一般是和order by搭配使用,通過排序,再取得自己想要的前幾行。

但是在使用rownum的時候要注意,使用排序后,返回的結果順序是進行了排序,但是rownum還是和原來的一樣,沒有隨著排序而改變。

原因:ROWNUM的編排在排序之前就產生了。

SQL> select id,name,salary,rownum from wages order by salary;

ID NAME ? ? ? ? ? SALARY ? ? ROWNUM

---------- ---------- ---------- ----------

5 xiaoming ? ? ? ? 2000 ? ? ? ? ?5

2 lisi ? ? ? ? ? ? 2500 ? ? ? ? ?2

1 zhangsan ? ? ? ? 3600 ? ? ? ? ?1

4 zhaoliu ? ? ? ? ?4500 ? ? ? ? ?4

3 wangwu ? ? ? ? ? 5000 ? ? ? ? ?3

所以此時使用要取工資最高的前三名,就發生了錯誤的結果

SQL> select id,name,salary,rownum from wages where rownum<=3 order by salary;

ID NAME ? ? ? ? ? SALARY ? ? ROWNUM

---------- ---------- ---------- ----------

2 lisi ? ? ? ? ? ? 2500 ? ? ? ? ?2

1 zhangsan ? ? ? ? 3600 ? ? ? ? ?1

3 wangwu ? ? ? ? ? 5000 ? ? ? ? ?3

但是,我們可以需要嵌套一層子查詢來抽取排序好的數據

SQL> ?select id,name,salary,rownum from (select * from wages order by salary);

ID NAME ? ? ? ? ? SALARY ? ? ROWNUM

---------- ---------- ---------- ----------

5 xiaoming ? ? ? ? 2000 ? ? ? ? ?1

2 lisi ? ? ? ? ? ? 2500 ? ? ? ? ?2

1 zhangsan ? ? ? ? 3600 ? ? ? ? ?3

4 zhaoliu ? ? ? ? ?4500 ? ? ? ? ?4

3 wangwu ? ? ? ? ? 5000 ? ? ? ? ?5

此時,rownum已經發生了變化,在通過外部查詢指定范圍,就可以得到想要的正確結果

SQL> select id,name,salary,rownum from (select * from wages order by salary) where rownum<=3;

ID NAME ? ? ? ? ? SALARY ? ? ROWNUM

---------- ---------- ---------- ----------

5 xiaoming ? ? ? ? 2000 ? ? ? ? ?1

2 lisi ? ? ? ? ? ? 2500 ? ? ? ? ?2

1 zhangsan ? ? ? ? 3600 ? ? ? ? ?3

來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/31386161/viewspace-2128815/,如需轉載,請注明出處,否則將追究法律責任。

總結

以上是生活随笔為你收集整理的oracle怎么获取行,在oracle中如何实现SELECT TOP N取得前几行记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。