Freitag, 2. September 2011

Select Top-Rows per SQL

Gerade brauchte ich für einen schnellen Test mal wieder einfach nur ein paar Datensätze aus einer Datenbank.
Die schnellste Art und Weise dieses zu realisieren ist, wenn man einfach nur die ersten x Zeilen ausliest.
Diese könnte man ggf. für bestimmte Auswertungen auch direkt sortiert ausgeben. Aber für meine Tests war das völlig egal.

Da ich ständig mit dem MS SQL-Server arbeite habe ich meine Abfrage wie folgt geschrieben.

-- Rückgabe der ersten 5 Zeilen aus Tabelle1
SELECT TOP 5 * FROM Tabelle1

Bei meinem aktuellen Test habe ich jedoch eine Oracle Datenbank abgefragt.
Nach der Ausführung des oben stehenden SQL-Statements habe ich jedoch folgenden Fehler bekommen.
Error starting at line 1 in command:
SELECT TOP 5 * FROM Tabelle1
Error at Command Line:1 Column:11
Error report:
SQL Error: ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden
00923. 00000 -  "FROM keyword not found where expected"
*Cause:   
*Action:

Nach kurzer Überlegung ist es mir direkt wieder eingefallen. Oracle kennt keinen TOP-Befehl.
Dafür gibt es in Oracle-Datenbanken jedoch die Spalte "rownum". Mit dieser kann man dann nicht nur Top-Werte sondern auch ganz bestimmte Datensätze wie folgt ausgeben lassen.

-- Rückgabe der ersten 5 Zeilen aus Tabelle1
SELECT * FROM Tabelle1 WHERE rownum <= 5

-- Rückgabe der Zeilen 6 bis 10 aus Tabelle1
SELECT * FROM Tabelle1 WHERE rownum > 5 AND rownum <= 10