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

Comment limiter les résultats des requêtes Oracle après la commande ?

DDD
Libérer: 2025-01-25 08:32:09
original
355 Les gens l'ont consulté

How to Limit Oracle Query Results After Ordering?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal