SQL(ORACLE):ORDER BY和LIMIT

我想要通过财产所有数据在我的数据库sorting,只有后使用LIMIT和OFFSET。

像这样的查询:

SELECT select_list FROM table_expression [ ORDER BY ... ] [ LIMIT { number | ALL } ] [ OFFSET number ] 

我知道sorting结束,只要它findsorting结果的第一个row_count行。 在调用LIMIT和OFFSET之前,我可以对所有数据进行sorting吗?

在12.1之前,Oracle不支持LIMITOFFSET关键字。 如果您想要检索结果集的第N行到第M行,则需要如下所示的内容:

 SELECT a.* FROM (SELECT b.*, rownum b_rownum FROM (SELECT c.* FROM some_table c ORDER BY some_column) b WHERE rownum <= <<upper limit>>) a WHERE b_rownum >= <<lower limit>> 

或使用分析function:

 SELECT a.* FROM (SELECT b.*, rank() over (order by some_column) rnk FROM some_table) WHERE rnk BETWEEN <<lower limit>> AND <<upper limit>> ORDER BY some_column 

这两种方法中的任何一种都会给你sorting结果的N到M行。

在12.1及更高版本中,您可以使用OFFSET和/或FETCH [FIRST | NEXT] FETCH [FIRST | NEXT]运营商:

 SELECT * FROM some_table ORDER BY some_column OFFSET <<lower limit>> ROWS FETCH NEXT <<page size>> ROWS ONLY