Oracles ROWNUM
Pseudospalte, die häufig zur Einschränkung von Ergebnismengen verwendet wird, stellt in Kombination mit der Reihenfolge eine einzigartige Herausforderung dar. Im Gegensatz zur LIMIT
-Klausel von MySQL, die nach dem Sortieren gilt, ROWNUM
filtert bevor die ORDER BY
-Klausel verarbeitet wird. Das bedeutet, dass die einfache Verwendung von ROWNUM
nicht garantiert, dass eine bestimmte geordnete Teilmenge Ihrer Ergebnisse vorliegt.
Der Standardansatz (alle Oracle-Versionen):
Um das Äquivalent der LIMIT
-Funktionalität von MySQL zu erreichen, verwenden Sie eine verschachtelte Abfrage:
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
Dieser Ansatz ordnet zunächst die Daten und wendet dann den ROWNUM
-Filter an, um sicherzustellen, dass die fünf höchsten Gehälter zurückgegeben werden.
Aufrechnungs- und Begrenzungsergebnisse:
Für eine anspruchsvollere Steuerung erfordert die Angabe eines Offsets und eines Grenzwerts eine etwas komplexere Abfrage:
<code class="language-sql">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 <= :MAX_ROW_TO_FETCH ) WHERE rnum >= :MIN_ROW_TO_FETCH;</code>
Ersetzen Sie :MAX_ROW_TO_FETCH
und :MIN_ROW_TO_FETCH
durch die gewünschte Ober- und Untergrenze. Dadurch werden nach der Bestellung Zeilen innerhalb eines bestimmten Bereichs abgerufen.
Oracle 12c und höher: Die FETCH
-Klausel:
Oracle 12c (und spätere Versionen) bieten eine elegantere Lösung mit der FETCH
-Klausel:
<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>
Die FETCH
-Klausel bietet eine sauberere und besser lesbare Möglichkeit, Ergebnisse einzuschränken und auszugleichen, was sie zur bevorzugten Methode für Oracle 12c und höher macht. Für ältere Versionen bleibt der Ansatz der verschachtelten Abfrage erforderlich.
Das obige ist der detaillierte Inhalt vonWie können Sie die Abfrageergebnisse effizient einschränken und in Oracle ausgleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!