首页 > 数据库 > mysql教程 > Oracle中如何高效限制和偏移查询结果?

Oracle中如何高效限制和偏移查询结果?

Mary-Kate Olsen
发布: 2025-01-25 08:52:11
原创
884 人浏览过

How to Efficiently Limit and Offset Query Results in Oracle?

掌握行限制和抵消Oracle查询

经常用于结果设置限制的

oracle的ROWNUMLIMIT pseududocolumn,在与订购结合使用时会提出一个独特的挑战。与MySQL的ROWNUM子句不同,该子句在排序之后适用,过滤> ORDER BYROWNUM>

子句是处理的。 这意味着简单地使用

不能保证您的结果的特定有序子集。>

标准方法(所有Oracle版本):

> LIMIT要获得相当于mySQL的

功能的等效物,请使用嵌套查询:
<code class="language-sql">SELECT *
FROM (
    SELECT *
    FROM emp
    ORDER BY sal DESC
)
WHERE ROWNUM <= 5;</code>
登录后复制

ROWNUM此方法首先订购数据,然后应用

过滤器,以确保返回前5个最高工资。

偏移和限制结果:

>

对于更复杂的控制,指定偏移和限制需要一个更复杂的查询:
<code class="language-sql">SELECT *
FROM (
    SELECT a.*, ROWNUM rnum
    FROM (
        SELECT *  -- Your main query with ORDER BY clause
        FROM some_table
        ORDER BY some_column
    ) a
    WHERE ROWNUM <= :MAX_ROW_TO_FETCH
)
WHERE rnum >= :MIN_ROW_TO_FETCH;</code>
登录后复制

:MAX_ROW_TO_FETCH>用所需的上限和下限替换:MIN_ROW_TO_FETCH>

。 订购后,这将在特定范围内获取行。

FETCH Oracle 12c及以后:

子句:

FETCH>

<code class="language-sql">-- Retrieve the first 10 rows
SELECT *
FROM sometable
ORDER BY name
FETCH FIRST 10 ROWS ONLY;

-- Retrieve rows 20-30
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>
登录后复制
Oracle 12c(及以后的版本)使用

子句提供了更优雅的解决方案:FETCH

子句提供了一种更清洁,更可读的方法来限制和偏移结果,使其成为Oracle 12c及以后的首选方法。 对于较旧的版本,嵌套查询方法仍然是必要的。

以上是Oracle中如何高效限制和偏移查询结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板