Oracle 分页查询 为什么需要嵌套

ORACLE分页查询SQL语句(最有效的分页) ** 一、效率高的写法 ** 1.无ORDER BY排序的写法。(效率最高) (经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM emp t WHERE hire_date BETWEEN TO_DATE ... 阅读详情
为什么基于ROWNUM的oracle分页实现,要采用三层嵌套的方式? 
1 首先,在没有order by clause的情况下,oracle的查询结果的顺序会是不确定的。如上面的例子。所以order by的使用是应该的,以免因为index等的原因导致不确定的results order。 
2 其次,在order by 和 ROWNUM同时使用时,oracle默认的策略是先为伪列rownum赋值,再order by。
引用
rownum与order by同时存在的问题 
当 where 后面有rownum的判断,并且存在order by时候,rownum的优先级高! 
  oracle会先执行rownum的判断,然后从结果中order by,很明显是错误的结果啦!就好像学校要取成绩最好的前10名同学,结果这种方法一执行,成了取出10名同学,然后按照成绩的高低排序! 
  这点与SQL Server的TOP完全不同,TOP遇上order by,是先执行order by,在分页的; 
  解决办法就是先执行order by,然后嵌套执行rownum-----说白啦就是用()改变函数的优先级!

所以,第二层嵌套的目的就是:让结果先order by,再取rownum! 
3 再次,因为rownum不可使用 >(=) 来判断的原因,所以需要最外围的第三层嵌套
SELECT *
  FROM (SELECT *
          FROM (SELECT ROWNUM AS ROW_ID, ORDER_ID
                  FROM ORDERS
                 ORDER BY ORDER_ID DESC) A
         WHERE ROW_ID < 10)
 WHERE ROW_ID >= 5;

--上面这样写也是错误的,正如前面的原因,有order by 和rownum时,先给rownum赋值,然后再对结果进行order by,
   所以上面的语句同样是取rownum为5--10之间的记录,而不是排好序之后的5--10记录。
正确写法:
SELECT B.ORDER_ID,B.ORDER_DETAILS,B.R_ID
  FROM (SELECT A.ORDER_ID,A.ORDER_DETAILS,ROWNUM AS R_ID      --对排序好的结果取其rownum,再取rownum 小于给定值的记录(不能直接对rownum取大于)
          FROM (SELECT ORDER_ID,ORDER_DETAILS       --获取排序好的结果集
                  FROM ORDERS
                 ORDER BY ORDER_ID DESC) A
         WHERE ROWNUM < 10) B
 WHERE R_ID >= 5;                    --取R_ID大于给定值的记录
PS: 不能在where语句中使用别名进行过滤(汗一个,看来很多东西需要实践啊。)
Dify实战:智能邮件工作流配置全解析 本文详细解析了如何利用Dify平台配置智能邮件工作流,实现邮件处理的自动化与智能化。内容涵盖从获取邮箱授权、安装插件、安全配置环境变量,到构建邮件发送工作流、创建调用该工作流的智能体(Agent)的完整步骤,并分享了连接知识库实现智能客服、定时发送日报等进阶自动化场景,旨在帮助用户显著提升邮件处理效率。 阅读详情

相关推荐

从半导体物理到实战:手把手教你测量MOS管体二极管的Vf和Trr

本文深入探讨了MOSFET体二极管的关键参数测量方法,重点讲解了正向压降(Vf)和反向恢复时间(Trr)的测量原理与实战步骤。通过搭建测试平台,使用万用表和示波器等工具,手把手指导如何量化这些影响开关损耗和效率的核心参数,并对比分析了硅基与碳化硅(SiC)器件在体二极管性能上的显著差异。

n7o8p的博客 341

Oracle为什么要用三层嵌套实现分页

Oracle为什么要用三层嵌套实现分页 先说结论: 嵌套出两层SELECT 对应的两个原因: ROWNUM的取值是在数据库物理行号,不受ORDER BY 影响。如果存在同一趟SELECT中,order by排序后的ROWNUM不是有序的,不会和查询结果行号对应,所以不能做条件过滤。需要在一次select order by 后得到的虚拟表中,再获取ROWNUM这样order by才能生效。 ROWNUM 只能做小于,不能直接做大于范围取值。 项目中使用分页插件,控制台输出sql 为: 1.

qq_45494908的博客 1247

深入RK3588内存管理:如何用dma_buf_alloc和mpp_buffer为RGA2分配4G以内内存(附kernel版本选择)

本文深入探讨了RK3588平台上RGA2核心的4G内存限制问题,详细解析了dma_buf_alloc和mpp_buffer两种内存分配方案的技术细节与适用场景。通过代码示例和性能对比,帮助开发者优化高分辨率视频处理流程,并提供了内核版本选择与常见错误排查指南。

weixin_29168153的博客 364

mysql嵌套分页_MySQL分页优化

最近,帮同事重写了一个MySQL SQL语句,该SQL语句涉及两张表,其中一张表是字典表(需返回一个字段),另一张表是业务表(本身就有150个字段,需全部返回),当然,字段的个数是否合理在这里不予评价。平时,返回的数据大概5w左右,系统尚能收到数据。但12月31日那天,数据量大概20w,导致SQL执行时间过长,未能在规定的时间内反馈结果,于是系统直接报错。一般的思路是用MySQL的分页功能,即直接...

weixin_34060672的博客 295

求助:有没有基于pscad的锂电池仿真模型

求助:有没有基于pscad的锂电池仿真模型 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变没有 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写...

qq_38922523的博客 1222

kaggle学习笔记-餐厅数据挖掘

分析Zomato数据集的基本思想是为了公平地了解影响在班加罗尔不同地方建立不同类型餐厅的因素,每个餐厅的总评级,班加罗尔是这样一个城市,拥有超过12,000家餐厅,餐厅供应来自世界各地的菜肴。每天都有新的餐馆开业,这个行业还没有饱和,需求也在与日俱增。然而,尽管需求不断增加,新餐馆却很难与老牌餐馆竞争。大多数餐厅都供应同样的食物。班加罗尔是印度的IT之都。这里的大多数人主要依靠餐馆的食物,因为他们没有时间自己做饭。由于对餐馆的需求如此巨大,因此研究一个地方的人口统计学就变得很重要。

优快云XXCQ的博客 1862

mysql需要3层嵌套分页吗_MySQL——优化嵌套查询和分页查询

优化嵌套查询嵌套查询(子查询)可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。嵌套查询写起来简单,也容易理解。但是,有时候可以被更有效率的连接(JOIN)替代。现在假如要找出从来没有在网站中消费的客户,也就是查询在客户customer表中但是不在支付payment表中的客户信息。嵌套查询:explain select * from customer ...

weixin_28309571的博客 134

华为OD新系统机试真题 2026.5.10 - 美观的灯笼

华为OD新系统机试真题【美观的灯笼】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【美观的灯笼】

qq_45776114的博客 643

Oracle分页及实例说明为何要嵌套两层或三层

Oracle分页和MySQL分页有点不一样,MySQL利用limit分页,Oracle利用rownum关键字来进行分页。 –rownum关键字:oracle对外提供的自动给查询结果编号的关键字,与每行的数据没有关系。 –注意:rownum关键字只能做< <=的判断,不能进行> >=的判断,所以外层我们用内层查出的rownum放到外层去比较 接下来就用这张表来尝试分页,这张表一共有31条数据 select * from table t 1.无排序写法 --第几页:page --

jdkss的博客 1417

C#解析基恩士(KEYENCE)PLC数据:KV协议通信与实时监控实现

KV协议是基恩士PLC使用的一种专用通信协议,通常用于与上位机进行数据交换。KV协议通过RS-232C、RS-485、Ethernet等接口与上位机通信,支持多种数据类型的读写,包括但不限于位、字、双字、浮点数等。简洁易用:KV协议的通信格式简单,易于实现。支持多种数据类型:支持位数据、字数据、定长字符串等。高效实时性:能够提供较高的实时数据交换性能,适合实时监控应用。本文介绍了如何通过C#与基恩士KV系列PLC进行通信,实现数据的解析和实时监控功能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1808

DSI3协议介绍

分布式系统接口(DSI)是一种通用且功能强大的总线协议,旨在将多个遥感器和执行器设备互连到中央控制模块。该网络的主要目标应用是汽车安全系统。这种应用的一些特点是需要低成本、高鲁棒性、中速互连,仅限于两根导线。此外,它必须具有故障安全性、确定性和良好的EMC特性。即使具有所有级别的智能和可编程性的设备都可以连接到网络,远程设备也必须能够通过简单的状态机实现。由于模块尺寸非常重要,因此中央模块和远程单元中的最小组件至关重要。

汽车电子软件领域知识分享 1万+

Oracle分页为什么采用三层查询

Oracle分页为什么采用三层查询 原始表数据如下 ID NAME AGE ADDRESS 1 嗨一 18 北京 2 王二 20 南京 3 麻子 22 西凉 4 太君 24 东京 5 华子 26 纽约 6 张三 28 悉尼 7 李四 21 柏林 8 江五 25 巴黎 9 酒条 27 伦敦 10 百度 19 拉萨 11 谷歌 24 西宁 要求根据年龄排序查询前十的数据并根据名称排序 拆解分页查询...

ge398629530的博客 311

【stm32+K210项目】基于K210与STM32协同工作的智能垃圾分类系统设计与实现(完整工程资料源码)

本系统采用SG90舵机Maix Bit摄像头STM32C8T6主控板以及LX_TRIG_MP3_V6.0语音播报模块,构建了一套高效的智能垃圾分类系统,综合运用了图像识别、语音播报及精准控制技术。SG90舵机负责控制垃圾桶的开盖操作。该舵机通过接收PWM信号来实现转动,内部有一个基准电路产生周期为20ms的PWM信号,通过外部脉冲信号的控制(高电平时间在0.5ms至2.5ms之间),使得舵机的输出轴转动到指定位置。舵机内的位置反馈电位计。

嵌入式技术开发 5099

Oracle分页查询探究

导语 :接触oracle有一段时间了,对于分页查询,伪列等概念并不是很透彻,因此一步步查询分析分页查询的意义,为什么要这么写,以此记录 标准的Oracle分页 查询 为三层嵌套,如下 select * from ( select A.*,rownum rn from ( select * from t...

Wormhole 383

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

oracle 三层嵌套分页查询

Oracle三层嵌套分页查询 --table A  select * from (select ta.*,rownum r  from (select * from A) ta where rownum 5 --注: 其实两层就可以,不过,两层嵌套查询不会用到oracle的外层条件内推机制,效率慢了点 rownum原理:                      很简单,rownu

水神 6122

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Oracle分页查询

rownum 在做分段查询的时候,在mysql中可以使用limit a,b 这种方式进行分段查询,同样的分页查询也是类似的道理,但是在ORACL中就不太一样了,如果在ORACLE中使用limit 就会报错命令语句未正确结束,造成这个问题的原因就是在ORACLE中不存在limit,那么同样的要想实现limit分段查询的可以使用ORACLE中的关键字rownum 用法 下面就用一个实际的例子举例说明 例如我现在要查询一些符合条件的数据,那么我使用了如下的SQL进行查询,查询出了总计103条数据 但是现

William_TWG的博客 8393

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

oracle 三层查询,oracle 三层嵌套分页查询

Oracle三层嵌套分页查询--table Aselect * from (select ta.*,rownum r from (select * from A) ta where rownum 5--注: 其实两层就可以,不过,两层嵌套查询不Oracle三层嵌套分页查询--table Aselect * from (select ta.*,rownum r from (select * fro...

weixin_33007509的博客 468

oracle分页怎么查询,Oracle的分页查询详解

Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。分页查询格式:SELECT * FROM(SELECT A.*, ROWNUM RNFROM (SELECT * FROM TABLE_NAME) AWHERE ROWNUM <= 40)WHERE RN >= 21其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM...

weixin_39825854的博客 1688

oracle 三层嵌套查询,oracle 三层嵌套分页查询

Oracle三层嵌套分页查询--table Aselect * from (select ta.*,rownum r from (select * from A) ta where rownum < 10) where r > 5--注: 其实两层就可以,不过,两层嵌套查询不会用到oracle的外层条件内推机制,效率慢了点rownum原理:很简单,rownum是oracle根据查询动...

weixin_42537499的博客 572

Oracle高效分页查询

Oracle高效分页查询 无ORDER BY排序的写法。(效率最高) (经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM emp t WHERE hire_date BETWEEN TO_DATE (...

hopeful_ddy的博客 719

Oracle数据库查询之分页查询

分页查询 在对数据库执行查询操作时,有时候会涉及到大量的数据,这些查到的数据如果就显示在同一页页面,过大的数据让人读起来就头疼。试想一下,当我们某度搜索关键字是,如果,某度将查询的结果不进行分页,就一个网页房大量的数据,那将会极大地影响你的使用体验。所以,分页查询在各项目中是很有用的。基于分页查询还可以写一些组合查询并且降低数据库的访问量。 以一张表为例,如果我们要查前两行数据怎么办? 这时候要引入一个 rownum(行序号),它是由oracle提供的,动态生成的,默认从1开始; 记录的是 select查询

hello,world 9205

[亲测]Oracle查询--子查询,分页查询(二)

ORACLE查询(子查询,分页查询) 一、子查询 (一)单行子查询 ( 只返回一条记录 ) 1 .查询 2012 年 1 月用水量大于平均值的台账记录 select * from t_account where usenum &amp;amp;amp;amp;gt; (select avg(usenum) from t_account where year = '2012' and month = '01' ); 结果: ...

Armymans的博客 2641

Oracle数据库分页查询[rownum和between的使用]

Oracle数据库分页查询1.直接使用rownum2.使用rownum分页查询2.1 rownum嵌套使用2.2 rownum嵌套查询12.3 rownum嵌套查询2(排序后分页)2.4 rownum嵌套查询2(BETWEEN) 1.直接使用rownum 直接使用rownum时,不能对 rownum 使用 >(大于或等于 1 的数值)、>=(大于 1 的数值)、=(不等于 1 的数值),否则无结果。 因此,直接用rownum的时候只能从1开始。(rownum >= 1) 原因:如果第一条不

旗袍不开、怎么得胜? 2855

oracle内推机制,oracle 三层嵌套分页查询

Oracle三层嵌套分页查询--table Aselect * from (select ta.*,rownum r from (select * from A) ta where rownum < 10) where r > 5--注: 其实两层就能够,不过,两层嵌套查询不会用到oracle的外层条件内推机制,效率慢了点oraclerownum原理:fetch很简单,rownum是...

weixin_35554306的博客 265

Oracle如何实现分页查询

Oracle实现分页查询常用SQL

CharlesYan的博客 5718

Oracle中的SQL分页查询原理和方法详解

转载请注明出处:http://blog.youkuaiyun.com/anxpp/article/details/51534006,谢谢!     本文分析并介绍Oracle中的分页查找的方法。     Oracle中的表,除了我们建表时设计的各个字段,其实还有两个字段(此处只介绍2个),分别是ROWID(行标示符)和ROWNUM(行号),即使我们使用DESCRIBE命令查看表的结构,也是看不到这

anxpp的博客 5万+
上一篇: ThreadPoolExecutor使用学习
下一篇: java的cp命令
feiyu8607
博客等级 码龄18年 26粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值