De nombreux utilisateurs de bases de données s'appuient sur les clauses limites de MySQL pour récupérer une plage spécifique après tri. Cependant, Oracle lui-même ne prend pas en charge les fonctions similaires. Oracle utilise la colonne Rownum Pseudo, qui est calculée avant l'ordre par. Lorsque vous essayez de limiter le nombre de lignes en fonction du tri, ce comportement peut provoquer des accidents.
Afin d'implémenter les restrictions similaires à MySQL dans Oracle, une solution est une sous-requête. Veuillez considérer l'exemple suivant:
Cette requête sera récupérée dans les 5 principales lignes de la colonne SAL.
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
Afin d'améliorer la flexibilité, vous pouvez utiliser les méthodes suivantes:
Cette requête du fils vous permet de spécifier la limite inférieure et supérieure de la banque de recherche.
<code class="language-sql">SELECT * FROM ( SELECT *, ROWNUM AS rnum FROM ( SELECT * FROM emp ORDER BY sal DESC ) AS a ) WHERE rnum >= :MIN_ROW_TO_FETCH AND rnum <= :MAX_ROW_TO_FETCH;</code>
De plus, Oracle 12C (12.1) présente une nouvelle grammaire:
Cette syntaxe fournit un moyen plus concis de limiter le nombre de résultats en fonction de la limite de tri.
<code class="language-sql">-- 获取前10个结果 SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY; -- 获取第20-30个结果行 SELECT * FROM sometable ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>
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!