Begrenzen Sie die Anzahl der Ergebniszeilen nach der Sortierung in der Oracle-Datenbank
Viele Datenbankbenutzer verlassen sich auf die LIMIT-Klausel von MySQL, um nach dem Sortieren einen bestimmten Zeilenbereich abzurufen. Allerdings unterstützt Oracle selbst keine ähnliche Funktionalität. Oracle verwendet die Pseudospalte ROWNUM, die vor ORDER BY berechnet wird. Dieses Verhalten kann zu unerwarteten Ergebnissen führen, wenn versucht wird, die Anzahl der Zeilen basierend auf der Sortierung zu begrenzen.
Um eine MySQL-ähnliche Einschränkungsfunktionalität in Oracle zu erreichen, besteht eine Lösung darin, Unterabfragen zu verwenden. Betrachten Sie das folgende Beispiel:
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
Diese Abfrage ruft die ersten 5 Zeilen in absteigender Reihenfolge nach der Sal-Spalte ab.
Für mehr Flexibilität können Sie die folgenden Methoden verwenden:
<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>
Mit dieser Unterabfrage können Sie Unter- und Obergrenzen für das Abrufen von Zeilen angeben.
Darüber hinaus führt Oracle 12c (12.1) eine neue Syntax ein:
<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>
Diese Syntax bietet eine sauberere Möglichkeit, die Anzahl der Ergebniszeilen basierend auf der Sortierung zu begrenzen.
Das obige ist der detaillierte Inhalt vonWie beschränken Sie die Zeile, die nach der Bestellung zu Oracle -Abfragen führen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!