網(wǎng)站首頁 編程語言 正文
oracle數(shù)據(jù)排序后獲取前幾行數(shù)據(jù)的寫法(rownum、fetch方式)_oracle
作者:搏·夢(mèng) ? 更新時(shí)間: 2023-01-23 編程語言0. 前言
無論在工作中,還是學(xué)習(xí)中,都會(huì)出現(xiàn)這樣子的需求,對(duì)某張表進(jìn)行了排序(按時(shí)間排序也好,其他字段排序也罷),然后獲取前x行的數(shù)據(jù),由于工作中經(jīng)常出現(xiàn),因此寫篇文章記錄一下多種寫法。
1. 先說結(jié)論
- 第一種使用rownum方式,在oracle數(shù)據(jù)庫中,查詢出來的數(shù)據(jù),可以通過rownum(行數(shù))來指定具體第幾行數(shù)據(jù),但需要注意以下幾點(diǎn):
- 查詢出來的數(shù)據(jù),第一行是 rownum=1,并不是從0開始的。
- 用rownum方式獲取數(shù)據(jù),必須要有一層嵌套select語句,這也是此方法最大的缺點(diǎn),導(dǎo)致sql多一層。
- 常用語法: select * from ( select * from people order by id desc ) where rownum = 1
- 第二種使用fetch方式,其還可以用于分頁查詢使用,fetch使用需要注意如下幾點(diǎn):
- oracle版本得12以上,否則無法使用了。
- 使用格式: OFFSET n ROWS FETCH NEXT m ROWS ONLY 從第n行開始,往后取m行(注 不包括第n行數(shù)據(jù))
- 也可以簡(jiǎn)寫為 FETCH NEXT m ROWS ONLY 從頭開始往后取m行
- 無需多一層select嵌套,可以直接寫在sql最后
2. 舉個(gè)例子
1. 數(shù)據(jù)準(zhǔn)備
在之前所說的,在線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ù)庫中,查詢出來的數(shù)據(jù),可以通過rownum(行數(shù))來指定具體第幾行數(shù)據(jù),但需要注意以下幾點(diǎn):
- 查詢出來的數(shù)據(jù),第一行是 rownum=1,并不是從0開始的。
- 用rownum方式獲取數(shù)據(jù),必須要有一層嵌套select語句,這也是此方法最大的缺點(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ò)語法錯(cuò)誤:
3. 使用fetch方式獲取前幾行數(shù)據(jù)(推薦)
fetch方式除了獲取前幾行數(shù)據(jù),還有另一個(gè)作用,就是進(jìn)行分頁的時(shí)候使用。
fetch使用需要注意如下幾點(diǎn):
- oracle版本得12以上,因此上面的在線學(xué)習(xí)oracle網(wǎng)頁無法使用了。
- 使用格式: OFFSET n ROWS FETCH NEXT m ROWS ONLY 從第n行開始,往后取m行(注 不包括第n行數(shù)據(jù))
- 也可以簡(jiǎn)寫為 FETCH NEXT m ROWS ONLY 從頭開始往后取m行
- 無需多一層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用于分頁,從第n行后,取m返回結(jié)果集
select * from people
order by id desc
OFFSET n ROWS FETCH NEXT m ROWS ONLY
總結(jié)
原文鏈接:https://blog.csdn.net/xueyijin/article/details/127473518
相關(guān)推薦
- 2022-07-20 Python對(duì)PDF文件的常用操作方法詳解_python
- 2022-10-15 Docker數(shù)據(jù)卷掛載命令volume(-v)與mount的使用總結(jié)_docker
- 2022-05-21 DaemonSet服務(wù)守護(hù)進(jìn)程的使用場(chǎng)景_服務(wù)器其它
- 2023-10-15 MVCC和BufferPool緩存機(jī)制
- 2022-12-28 React組件的生命周期深入理解分析_React
- 2022-11-04 C++淺析內(nèi)存分區(qū)模型概念與示例_C 語言
- 2022-03-29 C#算法之無重復(fù)字符的最長(zhǎng)子串_C#教程
- 2022-04-05 Python+Opencv答題卡識(shí)別用例詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支