Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle/SQL:Warum gibt die Abfrage SELECT * FROM Datensätze WHERE rownum>=5 AND rownum <=10 - null Zeilen zurück

In Oracle werden Rownum-Werte nach der Filterphase der Abfrage zugewiesen – sie sind keine Zeilen der Tabelle, sondern Zeilen der Ergebnismenge der Abfrage.

Die erste Zeile, die zurückkommt, erhält also immer Rownum 1, die zweite Zeile, die zurückkommt, Rownum 2 usw.

Der Rownum-Wert wird erst erhöht, nachdem er zugewiesen wurde, also jede Abfrage wie

select * from t where ROWNUM > 1

wird nie irgendwelche Ergebnisse zurückgeben. Diese Abfrage sagt:„Ich möchte nicht die erste Zeile sehen, die an mich zurückgegeben wird, sondern nur die danach“, was irgendwie paradox ist, sodass nichts zurückgegeben wird.

Weitere Einzelheiten finden Sie unter Ask Tom:On ROWNUM und Limiting Results.