Maison >base de données >tutoriel mysql >Comment limiter les lignes dans les requêtes Oracle après la commande?

Comment limiter les lignes dans les requêtes Oracle après la commande?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-25 08:41:12310parcourir

How to Limit Rows in Oracle Queries After Ordering?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn