Maison >base de données >tutoriel mysql >Comment imiter efficacement la clause limite de MySQL dans les requêtes Oracle SQL?
reproduisant la limite de MySQL dans Oracle SQL
La clause MySQL LIMIT
simplifie la récupération d'un nombre spécifié de lignes après la commande, cruciale pour les données paginantes. Oracle, cependant, nécessite une approche différente.
Pourquoi Rownum ne suffit pas
Bien que le pseudocolumn d'Oracle puisse sembler une solution, il est appliqué ROWNUM
avant la clause . Cela signifie que l'utilisation de ORDER BY
pour une gamme de lignes ordonnées donne des résultats imprévisibles. ROWNUM
Approche de sous-requête efficace
Une méthode fiable implique une sous-requête pour commander d'abord les données, puis appliquer pour limiter: ROWNUM
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
Définition des limites supérieures et inférieures
pour un contrôle plus précis, spécifiant les nombres de lignes minimum et maximum nécessite une requête plus complexe:
<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 ultérieurs Améliorations
Oracle 12C et les versions ultérieures offrent une solution plus propre utilisant et FETCH FIRST
: OFFSET
<code class="language-sql">-- Retrieve the first 10 rows SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY; -- Retrieve rows 20-30 SELECT * FROM sometable ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>Cette syntaxe rationalisée fournit un moyen plus intuitif de gérer les limites de lignes et les décalages dans Oracle.
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!