文章詳情頁
oracle數據排序后獲取前幾行數據的寫法(rownum、fetch方式)
瀏覽:170日期:2023-03-12 15:25:35
目錄
- 0. 前言
- 1. 先說結論
- 2. 舉個例子
- 1. 數據準備
- 2. 使用rownum方式獲取前幾行數據
- 3. 使用fetch方式獲取前幾行數據(推薦)
- 總結
0. 前言
無論在工作中,還是學習中,都會出現這樣子的需求,對某張表進行了排序(按時間排序也好,其他字段排序也罷),然后獲取前x行的數據,由于工作中經常出現,因此寫篇文章記錄一下多種寫法。
1. 先說結論
- 第一種使用rownum方式,在oracle數據庫中,查詢出來的數據,可以通過rownum(行數)來指定具體第幾行數據,但需要注意以下幾點:
- 查詢出來的數據,第一行是 rownum=1,并不是從0開始的。
- 用rownum方式獲取數據,必須要有一層嵌套select語句,這也是此方法最大的缺點,導致sql多一層。
- 常用語法: select * from ( select * from people order by id desc ) where rownum = 1
- 第二種使用fetch方式,其還可以用于分頁查詢使用,fetch使用需要注意如下幾點:
- oracle版本得12以上,否則無法使用了。
- 使用格式: OFFSET n ROWS FETCH NEXT m ROWS ONLY 從第n行開始,往后取m行(注 不包括第n行數據)
- 也可以簡寫為 FETCH NEXT m ROWS ONLY 從頭開始往后取m行
- 無需多一層select嵌套,可以直接寫在sql最后
2. 舉個例子
1. 數據準備
在之前所說的,在線oracle學習網站中準備好數據如下:
CREATE TABLE people ( id varchar2(10), name varchar2(10), sex varchar2(10));INSERT INTO people VALUES ("1", "小明", "男");INSERT INTO people VALUES ("2", "小紅", "女");INSERT INTO people VALUES ("3", "小黃", "男");INSERT INTO people VALUES ("4", "小紫", "男");INSERT INTO people VALUES ("5", "小綠", "男");INSERT INTO people VALUES ("6", "小白", "男");INSERT INTO people VALUES ("7", "大強", "男");INSERT INTO people VALUES ("8", "大青", "男");
這里將id類比時間字段,一般查詢根據時間進行倒序:
select * from peopleorder by id desc
2. 使用rownum方式獲取前幾行數據
在oracle數據庫中,查詢出來的數據,可以通過rownum(行數)來指定具體第幾行數據,但需要注意以下幾點:
- 查詢出來的數據,第一行是 rownum=1,并不是從0開始的。
- 用rownum方式獲取數據,必須要有一層嵌套select語句,這也是此方法最大的缺點,導致sql多一層。
倒序查詢之后,獲取第一行數據:
select * from ( select * from people order by id desc)where rownum = 1
倒序查詢之后,獲取前4行數據:
select * from ( select * from people order by id desc)where rownum <= 4
如果不使用嵌套select,則會報錯語法錯誤:
3. 使用fetch方式獲取前幾行數據(推薦)
fetch方式除了獲取前幾行數據,還有另一個作用,就是進行分頁的時候使用。
fetch使用需要注意如下幾點:
- oracle版本得12以上,因此上面的在線學習oracle網頁無法使用了。
- 使用格式: OFFSET n ROWS FETCH NEXT m ROWS ONLY 從第n行開始,往后取m行(注 不包括第n行數據)
- 也可以簡寫為 FETCH NEXT m ROWS ONLY 從頭開始往后取m行
- 無需多一層select嵌套,可以直接寫在sql最后
倒序查詢之后,獲取第一行數據:
select * from peopleorder by id descfetch next 1 rows only
倒序查詢之后,獲取前4行數據:
select * from peopleorder by id descfetch next 4 rows only
fetch用于分頁,從第n行后,取m返回結果集
select * from peopleorder by id descOFFSET n ROWS FETCH NEXT m ROWS ONLY
總結
到此這篇關于oracle數據排序后獲取前幾行數據的寫法(rownum、fetch方式)的文章就介紹到這了,更多相關oracle數據排序后獲取數據內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
標簽:
Oracle
排行榜