Oracle數據庫中排序後限制結果行數
許多數據庫用戶依賴MySQL的LIMIT子句在排序後檢索特定範圍的行。然而,Oracle本身並不支持類似的功能。 Oracle使用ROWNUM偽列,它在ORDER BY之前進行計算。當嘗試根據排序限制行數時,這種行為可能會導致意外結果。
為了在Oracle中實現類似MySQL的限制功能,一種解決方案是使用子查詢。請考慮以下示例:
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
此查詢將按sal列降序檢索前5行。
為了提高靈活性,您可以使用以下方法:
<code class="language-sql">SELECT * FROM ( SELECT *, ROWNUM AS rnum FROM ( SELECT * FROM emp ORDER BY sal DESC ) AS a ) WHERE rnum >= :MIN_ROW_TO_FETCH AND rnum <= :MAX_ROW_TO_FETCH;</code>
此子查詢允許您指定檢索行的下限和上限。
此外,Oracle 12c (12.1) 引入了一種新的語法:
<code class="language-sql">-- 获取前10个结果 SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY; -- 获取第20-30个结果行 SELECT * FROM sometable ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>
此語法提供了一種更簡潔的方法來根據排序限制結果行數。
以上是如何在排序後限制 Oracle 查詢中的行結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!