Oracle
 sql >> Base de données >  >> RDS >> Oracle

SQL (ORACLE) :ORDER BY et LIMIT

Avant 12.1, Oracle ne prend pas en charge la LIMIT ou OFFSET mots clés. Si vous souhaitez récupérer les lignes N à M d'un ensemble de résultats, vous aurez besoin de quelque chose comme :

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>>

ou en utilisant des fonctions analytiques :

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

L'une ou l'autre de ces approches vous donnera les lignes N à M du résultat trié.

Dans 12.1 et versions ultérieures, vous pouvez utiliser le OFFSET et/ou FETCH [FIRST | NEXT] opérateurs :

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