首頁 >資料庫 >mysql教程 >如何有效地限制和抵消查詢會導致Oracle?

如何有效地限制和抵消查詢會導致Oracle?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-25 08:52:11858瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn