ROWNUM 在分页查询中如何工作?

2024-01-07

所以我想选择 Oracle DB 中的一系列行。我需要这样做,因为我的表中有数百万行,并且我想将结果分页给用户(如果您知道在客户端执行此操作的另一种方法,我正在使用 JavaFX(如果它很重要),但我不这样做认为通过网络发送所有数据以在客户端对它们进行分页是个好主意)。

所以读完这篇文章后:SQL ROWNUM 如何返回特定范围之间的行 https://stackoverflow.com/questions/4552769/sql-rownum-how-to-return-rows-between-a-specific-range,我有以下查询:

Select * From (Select t.*, rownum r from PERSON t) Where r > 100 and r < 110;

The 100 and 110只是例子。在应用程序中,我只要求下限并添加大小 10_000 来获取接下来的 10_000 行。

现在 rownum 列出现在结果中,但我不想看到它。由于我对 SQL 不太熟悉,所以我的问题如下:

  1. 为什么(这是我第一次尝试,直到我搜索SO)Select * From Person Where rownum > 100 and rownum < 110;返回 0 行?

  2. 为什么没有简单的方法来做类似的事情Select ... FROM ... WHERE rownum BETWEEN lowerBound AND upperBound ?

  3. 如何摆脱r结果值中的列?从那里SQL 使用 SELECT * [ except columnA] FROM tableA 排除列? https://stackoverflow.com/questions/729197/sql-exclude-a-column-using-select-except-columna-from-tablea我显然需要创建一个视图或临时表,但是考虑我的查询还有另一种方法吗?

  4. 它能确保正确的分页吗?我读本文 http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html“使用 ROWNUM 分页”部分,这表示我应该按唯一的值对值进行排序,以获得一致的分页(所以我猜按rownum没问题,如果你能确认的话)。这岂不是违背了使用的目的FIRST_ROWS(N)?

我希望不要太多,我可以分成单独的问题,但我认为将它们折叠起来是相关的,因为它们密切相关。


您有 4 个问题,全部围绕ROWNUM。我将一一回答每个问题。

为什么(这是我第一次尝试,直到我搜索 SO) Select * From PersonWhere rownum > 100 and rownum

Thomas Kyte 关于 ROWNUM 和分页的很好的解释here https://asktom.oracle.com/Misc/oramag/on-rownum-and-limiting-results.html.

A ROWNUM值通过后被分配给一行谓词阶段查询的但在查询执行任何排序或聚合之前。此外,ROWNUM 值仅在分配后才会递增,这就是以下查询永远不会返回行的原因:

select * 
  from t 
 where ROWNUM > 1;

由于第一行的 ROWNUM > 1 不成立,因此 ROWNUM 不会前进到 2。因此,ROWNUM 值不会大于 1。

为什么没有简单的方法来执行 Select ... FROM ... WHERE rownum BETWEEN lowerBound AND upperBound 之类的操作?

就在这里。从甲骨文12c从那时起,您可以使用新的前 n 行限制特征。在这里查看我的答案 https://stackoverflow.com/a/29411029/3989608.

例如,以下查询将返回介于第四高 till 薪资排名第七按升序排列:

SQL> SELECT empno, sal
  2  FROM   emp
  3  ORDER BY sal
  4  OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;

     EMPNO        SAL
---------- ----------
      7654       1250
      7934       1300
      7844       1500
      7499       1600

SQL>

如何去掉结果值中的 r 列?

代替select *,列出外部查询中所需的列名。对于经常使用查询的情况,创建视图是一项简单的一次性活动。

或者,在SQL*Plus你可以使用NOPRINT命令。它不会显示您不想显示的列名称。但是,它仅适用于 SQL*Plus。

例如,

COLUMN column_name NOPRINT

例如,

SQL> desc dept
 Name                                      Null?    Type
 ----------------------------------------- -------- ------------
 DEPTNO                                             NUMBER(2)
 DNAME                                              VARCHAR2(14)
 LOC                                                VARCHAR2(13)

SQL> COLUMN dname NOPRINT
SQL> COLUMN LOC NOPRINT
SQL> SELECT * FROM dept;

    DEPTNO
----------
        10
        20
        30
        40

SQL>

它能确保正确的分页吗?

是的,如果您正确编写分页查询。

例如,

SELECT val
FROM   (SELECT val, rownum AS rnum
        FROM   (SELECT val
                FROM   t
                ORDER BY val)
        WHERE rownum <= 8)
WHERE  rnum >= 5;

       VAL
----------
         3
         3
         4
         4

4 rows selected.

SQL>

或者,使用 12c 上的新行限制功能,如我上面所示。

几个好的例子here http://oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1.php.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROWNUM 在分页查询中如何工作? 的相关文章

  • 何时在 mysql 中使用 Union [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于 Union 您会在什么现实情况下使用它 因为对我来说 对具有不同列用途 含义的两个表中的两个选择查询使用联合是没有意义的 例如
  • 使用联接更新表?

    我正在尝试使用表 B 中的数据更新表 A 我以为我可以做这样的事情 update A set A DISCOUNT 3 from INVOICE ITEMS A join ITEM PRICE QUNTITY B on A ITEM PRI
  • 当从属文本框中没有输入文本时,如何让 gridview 显示所有表格行?

    下面的代码可以正常工作 并根据文本框中输入的文本过滤我的网格视图 当我的文本框中没有输入任何文本时 我没有得到任何结果 并且无法理解为什么 我的问题 如何让gridview显示all当文本框中没有输入文本时表行 MSSQL Search n
  • Snowflake 中的动态 SQL

    当我在雪花中运行动态 SQL 时 遇到以下错误 未完成对 SQL MAIN 的分配 因为值超出了变量的大小限制 它的大小是263 限制为 256 内部存储大小以字节为单位 这是代码 SET v G 1 SET v G1 v G VARCHA
  • 获取在任何日期创建的表的列表?

    我遇到了这样的情况 我想查找我在 2012 年 9 月 14 日 2012 年 9 月 14 日 在 sql server 上创建的表 是否有任何查询会列出在此日期创建的这些表 SELECT FROM sys tables WHERE cr
  • 如何拥有引用另一个表的检查约束?

    我在 SQL Server 2008 数据库中有以下表 tblItem 其中有一个ItemID field 好项目 它还有一个 ItemID 字段 并且有一个指向 tblItem 的外键 tblBadItem 它也有一个 ItemID 字段
  • Android 中的列表视图分页

    我有一个列表视图 其中显示了 50 个元素 我决定对视图进行分页 以便视图的每个部分都有 10 个元素 然后单击 下一个 按钮以获取下一个 10 个元素 如何设置10个数据 我关注这篇文章http rakhi577 wordpress co
  • 如何在PL/SQL中模拟32位有符号整数溢出?

    您知道如何在 Oracle PL SQL 中模拟 32 位整数溢出吗 例如 2147483647 1 2147483648 or 2147483648 1 212147483647 我尝试了 PLS INTEGER 但它引发了溢出异常 我终
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • Oracle:按月分区表

    我的解决方案 德语几个月 PARTITION BY LIST to char GEBURTSDATUM Month PARTITION p1 VALUES JANUAR PARTITION p2 VALUES Februar PARTITI
  • 从 call_log 中获取最大并发通话数

    我需要帮助在 MySQL 5 0 77 中编写一个查询 根据下面所示的数据 办公室一天的通话量 返回并发电话呼叫的峰值数量 我只是想知道一天中任何特定时间同时打电话的人数最多是多少 首先 这是 MySQL 表 CREATE TABLE ca
  • meta_query,如何使用关系 OR 和 AND 进行搜索?

    已解决 请参阅下面的答案 我有一个名为的自定义帖子类型BOOKS 它有几个自定义字段 名称为 TITLE AUTHOR GENRE RATING 我该如何修复我的meta query下面的代码以便仅books在自定义字段中包含搜索词 tit
  • Oracle 中的 Json_object 返回 ORA-00907: 缺少右括号

    我正在尝试将 Oracle 表数据转换为 JSON 文件 我有三个数据库 下面的代码在一个数据库中以 JSON 文件形式提供输出 但其他两个数据库抛出ORA 00907 missing right parenthesis error 从语法
  • 没有提示指令的直连接中表的顺序是否会影响性能?

    所有基于 SQL 的 RDBMS 10 年前的版本 直接连接查询 没有提示指令 中的表顺序是否会对最佳性能和内存管理产生影响 听说最后一个join应该是最大的表 您的数据库的查询优化器如何处理这种情况 回答你的问题 是的 表的顺序在连接中有
  • 在laravel中组合两个不同的无关系数据库表查询进行分页

    我的数据库中有两个不相关的表 我需要将它们合并 以便我可以将其放在我的搜索视图中 但我不知道是否可能 这是我的代码 这news and season表不相关 但它们具有相似的列 我试图将其放入一个对象中以便于分页 是否可以 search r
  • SQL:如何从一个表中获取另一个表中每一行的随机行数

    我有两个数据不相关的表 对于表 A 中的每一行 我想要例如表 B 中的 3 个随机行 使用光标这相当容易 但速度非常慢 那么我该如何用单个语句来表达这一点以避免 RBAR 呢 要获得 0 到 N 1 之间的随机数 可以使用 abs chec
  • SQL Server 查询中 UNION ALL 与 OR 条件

    我必须根据表上不存在的条件选择一些行 如果我使用如下的 union all 它会在不到 1 秒的时间内执行 SELECT 1 FROM dummyTable WHERE NOT EXISTS SELECT 1 FROM TABLE t WH
  • 无法与重定向器建立连接。确保“sql browser”服务正在运行

    所以我尝试这个 sql server 2012 由于这个错误我无法打开任何 ssis 包 无法与重定向器建立连接 确保 sql browser 服务正在运行 我的 Sql 浏览器肯定正在运行 我尝试在本地服务 本地系统和网络下更改它 仍然没
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • 执行 `EXECUTE IMMEDIATE ` Oracle 语句出现错误

    我是 Oracle 的新手 当我执行以下语句时 BEGIN EXECUTE IMMEDIATE SELECT FROM DUAL END 我得到错误为 命令中从第 2 行开始出错 立即开始执行 从双选择 结尾 错误报告 ORA 00911

随机推荐

  • 从 Http Servlet 请求标头读取浏览器/客户端时间

    当向 servlet 发出请求时是否可以读取浏览器 客户端计算机 时间 我不相信是这样 不幸的是HTTPDate http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 18标头
  • R 中的成对交互矩阵

    我正在尝试计算 R 中的成对矩阵 该矩阵计算个体与其他个体交互的次数 因此该矩阵将包含与个体数量相对应的 N 行和列 我有一个数据框 在单独的列中列出 演员 和 合作伙伴 nn lt data frame actors c DOL DOL
  • 为什么建议 React 的 PureComponent 所有子组件都“纯”

    看完官方的介绍反应文档 https reactjs org docs 我遇到过this https reactjs org docs react api html reactpurecomponent关于纯组件 此外 React PureC
  • Visual Studio 生产力电动工具配置设置

    我试图找出 Visual Studio Productivity Power Tools 设置的存储位置 我最近转移到 Visual Studio 的新实例 并且丢失了所有 Power Tools 正则表达式选项卡着色设置 它们显然不是正常
  • R 的plot() 中的默认字体是什么?

    我无法找出默认字体是什么plot R 中的选项是 我记得在某个地方黑体但我找不到任何消息来源来证实这个想法 有谁知道默认字体是什么plot 选项是以及如何更改字体 我知道有family选项 但字体的选择非常有限 我也知道有一个family下
  • 在 Pandas 中合并索引上的数据帧效率更高

    为什么在索引上合并 Pandas 中的数据帧比在列上合并数据帧更有效 更快 import pandas as pd Dataframes share the ID column df pd DataFrame ID 0 1 2 3 4 Jo
  • 为什么嵌套路由(react-router)不能与 nginx 容器 docker build 一起使用

    我想将我的项目部署到生产中 不幸的是我有一个搅拌机问题react router嵌套路由器方法 我已经尝试解决这个问题 3 小时了 但我能弄清楚 我不完全擅长 docker 和 nginx 配置 当我在开发中运行该项目时 它工作正常 甚至在正
  • 如何在asp.net core中的ajax中加载部分视图

    当我通过 ajax 更改分页时 我想加载每行的部分视图 我的部分负责表中每一行的按钮 我有如下的部分视图 model Guid td style width 150px div class btn group a class btn btn
  • Xcode 7.0.1 与 CocoaPods 应用程序编译错误退出代码 1

    我最近升级到最新的 Xcode 添加了一堆新代码并修复了所有正常的编译错误后 出现了以下错误 PhaseScriptExecution Copy Pods Resources Users dpreston10 Library Develop
  • 隐藏空父项 - JFace 的 TreeViewer

    我正在 JFace 中创建一个树查看器 我想实现一些目标 我在里面使用过滤器 过滤器效果很好 但并不完美 当我使用filter expandAll 方法中 过滤器过滤了树中的所有项目 但有一些事情确实很烦人 尽管它过滤了树的所有项目 但它不
  • 在 IntelliJ Idea 中仅显示尾随空格

    因此 我最近从 Eclipse 迁移到 IntelliJ IDEA 终极版 并且我对空格感到挑剔 At the moment I ve set IntelliJ IDEA to show me whitespace and it looks
  • 将react-router和react-router-relay从v1.x更新到v2.x(位置“/”与任何路由不匹配)

    我正在尝试在我的应用程序中将react router更新到v2 6 并将react router relay更新到v0 7 但我正在努力遵循更改日志来解决所有重大更改 我想我已经解决了所有更改 但仍然无法使其发挥作用 警告 react ro
  • 如何在c中将时间转换为c字符串?

    我想在 c 文件中的 txt 文件中写入一些内容 但需要使用当前时间戳作为后缀来命名该文件 就像 filename 2010 08 19 20 30 一样 所以我得先定义文件名字符数组 然后自己处理文件名 一个一个分配字符 有什么简单的方法
  • 将旧 Unix 日期转换为 Perl 并进行比较

    要求 我的文件名为 Rajesh 1202242219 数字只不过是一个日期 date y m d H M 格式 现在我正在尝试编写一个 perl 脚本来从文件名中提取数字并与当前系统日期和时间进行比较 并根据此比较的输出 使用 perl
  • jQuery DataTable 在按钮单击上设置标题

    在我看来 我有 2 个输入字段 1 个按钮和 1 个我正在使用的表格jQuery 数据表 https datatables net 我正在使用打印功能 https datatables net extensions buttons exam
  • 当用户名包含斜杠时,PuTTY PSCP 错误“不支持本地到本地复制”

    我正在尝试使用 PSCP 将文件从本地 Windows 计算机移动到远程 Linux 服务器 我已连接到 VPN 以便可以使用我的用户名和密码访问远程 Linux 计算机 我的 PSCP 传输命令是 pscp C Users usernam
  • 如何使用 XmlSerializer 反序列化到现有实例?

    是否可以使用 XmlSerializer 将其数据反序列化为类的现有实例而不是新实例 这在两种情况下会很有帮助 轻松地将两个 XML 文件合并到一个对象实例中 让对象构造器本身成为从 XML 文件加载其数据的构造器 如果默认情况下不可能 则
  • servlet 过滤器是否可以确定哪个 servlet 将处理请求

    我正在编写一个执行日志记录的过滤器 如果请求最终到达某个 servlet 我需要禁用此日志记录 有没有办法让过滤器知道哪个 servlet 将处理请求 您可能希望设置 servlet 过滤器映射 以便在请求特定 servlet 时不触发它
  • 如何在 Mac OS X 上启动 mongodb 服务?

    我已经在我的 Mac 上安装了 Mongodb 但该进程当前未运行 如何启动 Mongodb 服务以便可以开始使用命令 如果您使用自制程序在 macOS 上安装 MongoDB 请在终端中键入以下内容 在大多数情况下应该可以解决问题 bre
  • ROWNUM 在分页查询中如何工作?

    所以我想选择 Oracle DB 中的一系列行 我需要这样做 因为我的表中有数百万行 并且我想将结果分页给用户 如果您知道在客户端执行此操作的另一种方法 我正在使用 JavaFX 如果它很重要 但我不这样做认为通过网络发送所有数据以在客户端