replizieren MySQLs Limit in Oracle SQL
Mysqls LIMIT
-Anklausel vereinfacht das Abrufen einer bestimmten Anzahl von Zeilen nach der Bestellung, was für die Paginierung von Daten von entscheidender Bedeutung ist. Oracle erfordert jedoch einen anderen Ansatz.
Warum Rownum nicht ausreicht
Während Oracas ROWNUM
pseudocolumn wie eine Lösung erscheint, wird es vor die -Anklausel angewendet. Dies bedeutet, ORDER BY
für eine Reihe geordneter Zeilen unvorhersehbare Ergebnisse zu erzielen. ROWNUM
Effektiver Unterabbildungsansatz
Eine zuverlässige Methode beinhaltet eine Unterabfrage, um zuerst die Daten zu bestellen, und dann für die Begrenzung anwenden: ROWNUM
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
Definieren der oberen und unteren Grenzen
Für eine genauere Kontrolle, die sowohl minimale als auch maximale Zeilenzahlen angeben, erfordert eine komplexere Abfrage:
<code class="language-sql">SELECT * FROM ( SELECT a.*, ROWNUM rnum FROM ( SELECT * FROM <your_table> ORDER BY <your_column> ) a WHERE ROWNUM <= :MAX_ROW_TO_FETCH ) WHERE rnum >= :MIN_ROW_TO_FETCH;</code>
Oracle 12c und spätere Verbesserungen
Oracle 12c und spätere Versionen bieten eine sauberere Lösung mit und FETCH FIRST
: OFFSET
<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>
Das obige ist der detaillierte Inhalt vonWie kann man die Grenzklausel von MySQL in Oracle SQL -Abfragen effektiv emulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!