„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann man die Oracle -Abfragenergebnisse effizient einschränken und ausgleichen?

Wie kann man die Oracle -Abfragenergebnisse effizient einschränken und ausgleichen?

Gepostet am 2025-04-20
Durchsuche:604

How to Efficiently Limit and Offset Query Results in Oracle?

Mastering Zeilenbegrenzung in Oracle -Abfragen

.

oracle's rownum pseudocolumn, der häufig für die Ergebnisbeschränkung verwendet wird, stellt eine einzigartige Herausforderung in Kombination mit der Bestellung vor. Im Gegensatz zu MySQLs limit , die sich nach der Sortierung bezieht, rownum filters vor die order by -Klausel wird verarbeitet. Dies bedeutet, dass Sie einfach rownum eine bestimmte bestellte Teilmenge Ihrer Ergebnisse garantieren.

Der Standardansatz (alle Oracle -Versionen):

um das Äquivalent zu MySQLs limit Funktionalität zu erreichen, verwenden Sie eine verschachtelte Abfrage:

SELECT *
FROM (
    SELECT *
    FROM emp
    ORDER BY sal DESC
)
WHERE ROWNUM 

Dieser Ansatz bestellt zuerst die Daten und wendet dann den rownum filter an, um sicherzustellen, dass die 5 höchsten Gehälter zurückgegeben werden.

Offss- und Begrenzung der Ergebnisse:

Für eine ausgefeiltere Kontrolle erfordert die Angabe eines Versatzes und einer Grenze eine etwas komplexere Abfrage:

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;

ersetzen : max_row_to_fetch und : min_row_to_fetch mit deinen gewünschten oberen und unteren Grenzen. Dies holt Zeilen innerhalb eines bestimmten Bereichs nach der Bestellung.

oracle 12c und darüber hinaus: die fetch klausel:

Oracle 12c (und spätere Versionen) bieten eine elegantere Lösung mit der Fetch Klausel:

-- 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;

Die Klausel fetch bietet eine sauberere und lesbarere Möglichkeit, Ergebnisse zu begrenzen und zu optimieren, was sie zur bevorzugten Methode für Oracle 12c und später macht. Für ältere Versionen bleibt der verschachtelte Abfrageansatz notwendig.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3