在 Oracle SQL 複製 MySQL 的 LIMIT
MySQL 的 LIMIT
子句簡化了排序後檢索指定行數的過程,這對於分頁資料至關重要。 然而,Oracle 需要不同的方法。
為什麼 ROWNUM 不夠
雖然 Oracle 的 ROWNUM
偽列看起來像是解決方案,但它是在 子句之前應用的。這意味著對一系列有序行使用 ORDER BY
會產生不可預測的結果。 ROWNUM
有效的子查詢方法
可靠的方法是先使用子查詢對資料進行排序,然後套用進行限制:ROWNUM
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
定義上限與下限
為了更精確的控制,指定最小和最大行數需要更複雜的查詢:
<code class="language-sql">SELECT * FROM ( SELECT a.*, ROWNUM rnum FROM ( SELECT * FROM <your_table> ORDER BY <your_column> ) a WHERE ROWNUM <= :MAX_ROW_TO_FETCH ) WHERE rnum >= :MIN_ROW_TO_FETCH;</code>
Oracle 12c 及更高版本的增強功能
Oracle 12c 及更高版本使用 和 FETCH FIRST
提供了更乾淨的解決方案:OFFSET
<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 中的行限制和偏移量。
以上是如何有效地模擬Oracle SQL查詢中的MySQL的限制條款?的詳細內容。更多資訊請關注PHP中文網其他相關文章!