首頁 > 資料庫 > mysql教程 > 下單後如何限制Oracle查詢結果?

下單後如何限制Oracle查詢結果?

DDD
發布: 2025-01-25 08:32:09
原創
320 人瀏覽過

How to Limit Oracle Query Results After Ordering?

簡明限制 Oracle 中的有序結果

Oracle 的行限制不同於 MySQL 等更簡單的 SQL 方言。 MySQL 使用 LIMIT,而 Oracle 使用 ROWNUM 偽列。 但是,在 ROWNUM 之前的 WHERE 子句中直接使用 ORDER BY 會產生不可預測的結果。

挑戰:限量前訂購

問題源於ROWNUM子句之前ORDER BY的評估。 這意味著排序後你得不到前 N 行;相反,你會得到 N 任意行。

解決方案:通過子查詢進行精確控制

要正確限制 排序後的行,請使用子查詢:

<code class="language-sql">SELECT *
FROM (
  SELECT *
  FROM emp
  ORDER BY sal DESC
)
WHERE ROWNUM <= 10;</code>
登入後複製

首先按工資 (emp) 降序對 sal 表進行排序,然後外部查詢使用 ROWNUM.

僅選擇前 10 行

指定開始行和結束行:

為了更精確的控制,定義上限和下限需要嵌套子查詢:

<code class="language-sql">SELECT *
FROM (
  SELECT a.*, ROWNUM rnum
  FROM (
    SELECT * FROM emp ORDER BY sal DESC
  ) a
  WHERE ROWNUM <= 30
)
WHERE rnum >= 21;</code>
登入後複製

這將在按工資排序後檢索第 21-30 行(含)。

現代 Oracle(12c 及更高版本):簡化語法

Oracle 12c 及更高版本提供了更簡潔的方法:

<code class="language-sql">-- Top 10 results
SELECT *
FROM sometable
ORDER BY name
FETCH FIRST 10 ROWS ONLY;

-- Rows 20-30
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>
登入後複製

FETCH FIRSTOFFSET 語法對於分頁來說明顯更具可讀性和效率。 如果您的 Oracle 版本支持,請使用此方法。

以上是下單後如何限制Oracle查詢結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板