最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年12月21日 11:39:02   作者:搏·夢(mèng)  
項(xiàng)目中用到Oracle分組查詢?nèi)∶拷M排序后的前N條記錄,group?by?只能返回每個(gè)組的單條統(tǒng)計(jì),下面這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)排序后獲取前幾行數(shù)據(jù)的寫法(rownum、fetch方式),需要的朋友可以參考下

0. 前言

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

1. 先說(shuō)結(jié)論

  1. 第一種使用rownum方式,在oracle數(shù)據(jù)庫(kù)中,查詢出來(lái)的數(shù)據(jù),可以通過(guò)rownum(行數(shù))來(lái)指定具體第幾行數(shù)據(jù),但需要注意以下幾點(diǎn):
    1. 查詢出來(lái)的數(shù)據(jù),第一行是 rownum=1,并不是從0開(kāi)始的。
    2. 用rownum方式獲取數(shù)據(jù),必須要有一層嵌套select語(yǔ)句,這也是此方法最大的缺點(diǎn),導(dǎo)致sql多一層。
    3. 常用語(yǔ)法: select * from ( select * from people order by id desc ) where rownum = 1
  2. 第二種使用fetch方式,其還可以用于分頁(yè)查詢使用,fetch使用需要注意如下幾點(diǎn):
    1. oracle版本得12以上,否則無(wú)法使用了。
    2. 使用格式: OFFSET n ROWS FETCH NEXT m ROWS ONLY 從第n行開(kāi)始,往后取m行(注 不包括第n行數(shù)據(jù))
    3. 也可以簡(jiǎn)寫為 FETCH NEXT m ROWS ONLY 從頭開(kāi)始往后取m行
    4. 無(wú)需多一層select嵌套,可以直接寫在sql最后

2. 舉個(gè)例子

1. 數(shù)據(jù)準(zhǔn)備

在之前所說(shuō)的,在線oracle學(xué)習(xí)網(wǎng)站中準(zhǔn)備好數(shù)據(jù)如下:

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', '大強(qiáng)', '男');
INSERT INTO people VALUES ('8', '大青', '男');

這里將id類比時(shí)間字段,一般查詢根據(jù)時(shí)間進(jìn)行倒序:

select * from people
order by id desc

2. 使用rownum方式獲取前幾行數(shù)據(jù)

在oracle數(shù)據(jù)庫(kù)中,查詢出來(lái)的數(shù)據(jù),可以通過(guò)rownum(行數(shù))來(lái)指定具體第幾行數(shù)據(jù),但需要注意以下幾點(diǎn)

  • 查詢出來(lái)的數(shù)據(jù),第一行是 rownum=1,并不是從0開(kāi)始的。
  • 用rownum方式獲取數(shù)據(jù),必須要有一層嵌套select語(yǔ)句,這也是此方法最大的缺點(diǎn),導(dǎo)致sql多一層。

倒序查詢之后,獲取第一行數(shù)據(jù):

select * from (
  select * from people
  order by id desc
)
where rownum = 1

倒序查詢之后,獲取前4行數(shù)據(jù):

select * from (
  select * from people
  order by id desc
)
where rownum <= 4

如果不使用嵌套select,則會(huì)報(bào)錯(cuò)語(yǔ)法錯(cuò)誤:

3. 使用fetch方式獲取前幾行數(shù)據(jù)(推薦)

fetch方式除了獲取前幾行數(shù)據(jù),還有另一個(gè)作用,就是進(jìn)行分頁(yè)的時(shí)候使用。

fetch使用需要注意如下幾點(diǎn):

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

倒序查詢之后,獲取第一行數(shù)據(jù):

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

倒序查詢之后,獲取前4行數(shù)據(jù):

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

fetch用于分頁(yè),從第n行后,取m返回結(jié)果集

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

總結(jié)

到此這篇關(guān)于oracle數(shù)據(jù)排序后獲取前幾行數(shù)據(jù)的寫法(rownum、fetch方式)的文章就介紹到這了,更多相關(guān)oracle數(shù)據(jù)排序后獲取數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

应城市| 榆树市| 蒲江县| 光山县| 怀远县| 葫芦岛市| 乐平市| 紫云| 敖汉旗| 建阳市| 京山县| 临武县| 延川县| 余庆县| 伊春市| 平原县| 双牌县| 郎溪县| 平罗县| 正镶白旗| 隆化县| 辽阳市| 阿拉善左旗| 稻城县| 富民县| 沙湾县| 保康县| 上蔡县| 临猗县| 兰州市| 合肥市| 麟游县| 车险| 上林县| 弥渡县| 荣成市| 延川县| 宜君县| 平果县| 永顺县| 海林市|