Oracle 無 LIMIT,使用 ROWNUM 但需注意:ROWNUM 在 WHERE 子句中只能用 < 或 <=,不能直接用 > 或 BETWEEN。
-- 無結果返回
SELECT * FROM table WHERE ROWNUM > 90 AND ROWNUM < 100;
原因:Oracle 先分配 ROWNUM=1,發現不滿足 >90 直接丟棄,後續行永遠得不到 ROWNUM=2...,導致無行滿足條件。
SELECT * FROM table WHERE ROWNUM < 101
MINUS
SELECT * FROM table WHERE ROWNUM < 91;
即取前 100 行減去前 90 行,得到第 91-100 行。
SELECT * FROM table
OFFSET 90 ROWS FETCH NEXT 10 ROWS ONLY;
理解 ROWNUM 分配機制是編寫高效分頁 SQL 的前提。