Maison >base de données >tutoriel mysql >Comment limiter les résultats des requêtes Oracle après la commande ?
Limiter de manière concise les résultats ordonnés dans Oracle
La limitation des lignes d'Oracle diffère des dialectes SQL plus simples comme MySQL. Alors que MySQL utilise LIMIT
, Oracle utilise la pseudo-colonne ROWNUM
. Cependant, utiliser directement ROWNUM
dans une clause WHERE
avant ORDER BY
donne des résultats imprévisibles.
Le défi : commander avant de limiter
Le problème vient de l'évaluation de ROWNUM
avant la clause ORDER BY
. Cela signifie que vous n'obtenez pas les N premières lignes après le tri ; à la place, vous obtenez N lignes arbitraires.
La solution : des sous-requêtes pour un contrôle précis
Pour limiter correctement les lignes après le tri, utilisez une sous-requête :
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 10;</code>
Cela classe d'abord la table emp
par salaire (sal
) décroissant, puis la requête externe sélectionne uniquement les 10 premières lignes en utilisant ROWNUM
.
Spécification des lignes de début et de fin :
Pour un contrôle plus précis, la définition des limites supérieure et inférieure nécessite des sous-requêtes imbriquées :
<code class="language-sql">SELECT * FROM ( SELECT a.*, ROWNUM rnum FROM ( SELECT * FROM emp ORDER BY sal DESC ) a WHERE ROWNUM <= 30 ) WHERE rnum >= 21;</code>
Ceci récupère les lignes 21 à 30 (inclus) après tri par salaire.
Oracle moderne (12c et versions ultérieures) : syntaxe simplifiée
Oracle 12c et versions ultérieures offrent une approche plus propre :
<code class="language-sql">-- Top 10 results SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY; -- Rows 20-30 SELECT * FROM sometable ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>
Cette syntaxe FETCH FIRST
et OFFSET
est nettement plus lisible et efficace pour la pagination. Utilisez cette méthode si votre version d'Oracle la prend en charge.
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!