Verwendung von rownum in einer Oracle SQL-Anweisung in Kombination mit einer order by-Klausel

Welche der folgenden beiden SQL-Anweisungen gibt die gewünschte Ergebnismenge zurück? (d. h. die zehn Zeilen mit Status = 0 und den höchsten Startzeiten)?

Werden beide Anweisungen immer dieselbe Ergebnismenge zurückgeben? (StartTime ist einzigartig)?

<code>SELECT * 
FROM MyTable 
WHERE Status=0 
AND ROWNUM <= 10 
ORDER BY StartTime DESC

SELECT * 
FROM (
    SELECT * 
    FROM MyTable 
    WHERE Status=0 
    ORDER BY StartTime DESC
) 
WHERE ROWNUM <= 10
</code>

Hintergrund

Mein DBAdmin sagte mir, dass die erste Anweisung wirdzuerst beschränke die Tabelle auf 10 Zeilen und ordne diese zufälligen Zeilen nach StartTime, was definitiv nicht das ist, was ich will. Von dem, was ich gelernt habediese Antwortist die order by-Klausel der zweiten Anweisung überflüssig und könnte von einem Optimierer entfernt werden, was ich auch nicht wünsche.

Ich fragte einähnliche Frage in Bezug auf dielimit Klausel in einer Abfrage an eine SQLite-Datenbank und bin daran interessiert, etwaige Unterschiede zu den obigen Aussagen zu verstehen (unter Verwendung vonlimit Vsrownum) verwendet mit einem Orakel db.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage