pseudocolumn d'Oracle rownum
, fréquemment utilisé pour la limitation du set de résultat, présente un défi unique lorsqu'il est combiné avec l'ordre. Contrairement à la clause de MySQL limit
, qui s'applique après tri, Rownum
filtres avant La clause d'ordre par
est traitée. Cela signifie que l'utilisation de rownum
ne garantira pas un sous-ensemble ordonné spécifique de vos résultats.
L'approche standard (toutes les versions oracle):
Pour réaliser l'équivalent de la fonctionnalité limite de MySQL
, utilisez une requête imbriquée:
SELECT *
FROM (
SELECT *
FROM emp
ORDER BY sal DESC
)
WHERE ROWNUM
Cette approche commande d'abord les données, puis applique le filtre rownum
, en s'assurant que les 5 meilleurs salaires sont renvoyés.
Offseting et limitant les résultats:
pour un contrôle plus sophistiqué, spécifiant à la fois un décalage et une limite nécessite une requête légèrement plus complexe:
SELECT *
FROM (
SELECT a.*, ROWNUM rnum
FROM (
SELECT * -- Your main query with ORDER BY clause
FROM some_table
ORDER BY some_column
) a
WHERE ROWNUM = :MIN_ROW_TO_FETCH;
remplacer : max_row_to_fetch
et : min_row_to_fetch
avec vos limites supérieures et inférieures souhaitées. Cela récupère les lignes dans une plage spécifique après la commande.
oracle 12c et au-delà: le fetch
clause:
Oracle 12c (et versions ultérieures) offrent une solution plus élégante en utilisant la clause fetch
:
-- 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;
La clause fetch
fournit un moyen plus propre et plus lisible de limiter et de compenser les résultats, ce qui en fait la méthode préférée pour Oracle 12C et plus tard. Pour les versions plus anciennes, l'approche de requête imbriquée reste nécessaire.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3