Maison >base de données >tutoriel mysql >Comment limiter les lignes dans les requêtes Oracle après la commande?
Restriction des ensembles de résultats dans les requêtes Oracle ordonnées
La pseudo-colonne ROWNUM
d'Oracle diffère de la clause LIMIT
de MySQL ; ROWNUM
est attribué avant que la clause ORDER BY
soit traitée. Par conséquent, l'utilisation directe de ROWNUM
ne limitera pas les lignes après la commande. Pour y parvenir, utilisez une sous-requête :
<code class="language-sql">SELECT * FROM (SELECT * FROM emp ORDER BY sal DESC) WHERE ROWNUM <= n;</code>
Cette approche classe d'abord la table emp
par salaire (sal
) décroissant, puis la requête externe utilise ROWNUM
pour limiter la sortie aux n
premières lignes.
Pour des scénarios plus complexes nécessitant à la fois des limites supérieure et inférieure, une sous-requête imbriquée est nécessaire :
<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 et au-delà
Oracle 12c (et versions ultérieures) propose une syntaxe plus simplifiée en utilisant FETCH FIRST
et OFFSET
:
<code class="language-sql">SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY;</code>
Cela limite directement le résultat défini aux 10 premières lignes après la commande par name
. Pour spécifier un décalage (par exemple, ignorer les 20 premières lignes et récupérer les 10 suivantes), utilisez la clause OFFSET
:
<code class="language-sql">SELECT * FROM sometable ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>
Référez-vous à la documentation officielle d'Oracle pour des exemples complets et des stratégies d'optimisation des performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!