日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

oracle數據排序后獲取前幾行數據的寫法(rownum、fetch方式)_oracle

作者:搏·夢 ? 更新時間: 2023-01-23 編程語言

0. 前言

無論在工作中,還是學習中,都會出現這樣子的需求,對某張表進行了排序(按時間排序也好,其他字段排序也罷),然后獲取前x行的數據,由于工作中經常出現,因此寫篇文章記錄一下多種寫法。

1. 先說結論

  1. 第一種使用rownum方式,在oracle數據庫中,查詢出來的數據,可以通過rownum(行數)來指定具體第幾行數據,但需要注意以下幾點:
    1. 查詢出來的數據,第一行是 rownum=1,并不是從0開始的。
    2. 用rownum方式獲取數據,必須要有一層嵌套select語句,這也是此方法最大的缺點,導致sql多一層。
    3. 常用語法: select * from ( select * from people order by id desc ) where rownum = 1
  2. 第二種使用fetch方式,其還可以用于分頁查詢使用,fetch使用需要注意如下幾點:
    1. oracle版本得12以上,否則無法使用了。
    2. 使用格式: OFFSET n ROWS FETCH NEXT m ROWS ONLY 從第n行開始,往后取m行(注 不包括第n行數據)
    3. 也可以簡寫為 FETCH NEXT m ROWS ONLY 從頭開始往后取m行
    4. 無需多一層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 people
order 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使用需要注意如下幾點:

  1. oracle版本得12以上,因此上面的在線學習oracle網頁無法使用了。
  2. 使用格式: OFFSET n ROWS FETCH NEXT m ROWS ONLY 從第n行開始,往后取m行(注 不包括第n行數據)
  3. 也可以簡寫為 FETCH NEXT m ROWS ONLY 從頭開始往后取m行
  4. 無需多一層select嵌套,可以直接寫在sql最后

倒序查詢之后,獲取第一行數據:

select * from people
order by id desc
fetch next 1 rows only

倒序查詢之后,獲取前4行數據:

select * from people
order by id desc
fetch next 4 rows only

fetch用于分頁,從第n行后,取m返回結果集

select * from people
order by id desc
OFFSET n ROWS FETCH NEXT m ROWS ONLY

總結

原文鏈接:https://blog.csdn.net/xueyijin/article/details/127473518

欄目分類
最近更新