In Oracle können Sie die where-Klausel mit rownum verwenden, um die ersten zehn Datensätze abzufragen. Die where-Klausel wird verwendet, um die Bedingungen der Abfrage einzuschränken, und rownum wird verwendet, um die Gesamtzahl der für die Abfrage zurückgegebenen Zeilen zu begrenzen Die Syntax lautet „wählen Sie * aus dem Tabellennamen aus, wobei Zeilennummer <=10“ ist.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, Oracle 11g-Version, Dell G3-Computer.
Wie frage ich die Top 10 Datensätze in der Tabelle in Oracle ab?
select * from test where rownum <=10
Das Folgende ist eine Einführung in rownum
Die Verwendung von rownum und row_number() over()
ROWNUM ist eine von Oracle bereitgestellte Pseudospalte ab 8. Sie nummeriert die Ergebnisse von SQL, immer beginnend bei 1, üblich Der Zweck besteht darin, die Paging-Ausgabe zu verwenden.
Zum Beispiel
SELECT * FROM torderdetail a WHERE ROWNUM <= 10
Diese Anweisung dient der Ausgabe der ersten 10 Datensätze. Ihr Zweck ähnelt hier dem von SQL Server, aber rownum sollte für die Ausgabe des angegebenen Zahlenbereichs leistungsfähiger sein
SELECT * FROM (SELECT a.*, ROWNUM rn FROM torderdetail a) WHERE rn >= 10 AND rn <= 20
Diese Anweisung dient zur Ausgabe des 10. bis 20. Datensatzes. Der Grund, warum rownum rn hier verwendet wird, besteht darin, rownum in eine Instanz umzuwandeln, da rownum selbst nur die Vergleichsmethode <= verwenden und nur in eine reale konvertiert werden kann Spalte, so dass der Vergleich von >= durchgeführt wurde.
In praktischen Anwendungen ist es oft erforderlich, zuerst die Datensätze zu sortieren und dann Rownum abzurufen. Im Allgemeinen gibt es eine Diskussion über das Abrufen von Rownum In den letzten 10 Datensätzen hat jemand eine solche Anweisung abgegeben
rrreeDer Grund, warum eine solche Anweisung erscheint, ist hauptsächlich Effizienzüberlegungen. Die vorherige Anweisung besteht darin, die gesamte Tabelle zu scannen und dann 10 Datensätze abzurufen, die letztere Anweisung scannt nicht die gesamte Tabelle, sondern ruft nur 10 Datensätze ab. Offensichtlich ist die Effizienz der letztgenannten Anweisung viel höher.
Warum gibt es dann einen Streit? Der Streit liegt in der Reihenfolge der Ausführung. Sollten wir zuerst eine Sortierung durchführen, um 10 Datensätze zu erhalten, oder sollten wir 10 Datensätze erhalten und dann sortieren? Wenn man die beiden Reihenfolgen herausnimmt, sind die Ergebnisse völlig gegensätzlich. Wenn man zuerst 10 Datensätze herausnimmt und dann 10 Datensätze herausnimmt, werden die ersten 10 Datensätze herausgenommen. Für diese Aussage wird allgemein angenommen, dass die Ausführungsreihenfolge darin besteht, zuerst 10 Datensätze abzurufen und sie dann zu sortieren. Diese Aussage sollte also ein Fehler sein. Dies ist jedoch nicht der Fall. Die Ausführungsreihenfolge dieser Anweisung bezieht sich auf das Feld „Order by“. ) und das Sortierfeld Wenn es sich nicht um PK handelt, werden zuerst 10 Elemente entnommen und dann sortiert. Zu diesem Zeitpunkt weicht das Ergebnis von den Anforderungen ab, sodass die zweite Schreibweise sicherstellen muss, dass das Ergebnis beim Sortieren des Felds korrekt ist ist der Primärschlüssel.
Die Analysefunktion Row_number() over() wird seit 9I bereitgestellt. Ihr allgemeiner Zweck ähnelt rownum.
Die allgemeine Schreibmethode row_number() over(order by order_date desc) generiert die gleiche Reihenfolge wie die rownum-Anweisung, und die Effizienz ist dieselbe (für die rownum-Anweisung, die auch order by hat), also in diesem Fall die beiden Verwendungen sind gleich.
Um die letzten 10 Datensätze nach der Gruppierung zu übernehmen, kann rownum dies derzeit nur mit row_number() erreichen (Partition nach Gruppierungsfeldreihenfolge nach Sortierfeld), um beispielsweise die Gruppierungsnummerierung zu erreichen Letzte 10 Bestelldatensätze jedes Tages im letzten Monat
rrreeEine alternative Verwendung von Rownum. Manchmal stoßen wir auf diese Anforderung und benötigen die Ausgabe aller Tage des Monats. Viele Leute werden verärgert sein, weil es keine solche Tabelle gibt die Datenbank. Wie werden alle Tage eines Monats ausgegeben? Verwenden Sie Rownum, um das Problem zu lösen:
SELECT * FROM (SELECT a.* FROM torderdetail a ORDER BY order_date DESC) WHERE ROWNUM <= 10
Empfohlenes Tutorial: „
Oracle Video Tutorial“
Das obige ist der detaillierte Inhalt vonSo fragen Sie die ersten 10 Datensätze in Oracle ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!