de.comp.lang.php.* FAQ

18.7. Wie selektiere ich nur bestimmte Zeilen (LIMIT unter MySQL)?

Antwort von Thomas Fromm

Da Oracle über kein Limit verfügt gestaltet sich die Abfrage etwas komplizierter (das Beispiel funktioniert erst ab Version 8.1):

SELECT *
  FROM
   (SELECT ROWNUM rownum2, inline_view1.*
      FROM
       (SELECT ROWNUM rownum1, ename, hiredate
          FROM emp
          ORDER BY hiredate
       ) inline_view1  -- zum Sortieren (ROWNUM hier noch ungeordnet)
   ) inline_view2      -- ROWNUM spiegelt jetzt die Sortierung wider
WHERE rownum2 BETWEEN 5 AND 7

Dies ist nicht sonderlich schnell, weil die innere Abfrage alle Zeilen auswählt. Für Versionen ab 8.1.6 geht auch folgendes:

SELECT *
  FROM
   (SELECT ROW_NUMBER()
    OVER(ORDER BY hiredate) rownum1, ename, hiredate
      FROM emp
   ) inline_view1
WHERE rownum1 BETWEEN 5 AND 7
/

Will man lediglich n Zeilen ausgeben tuts auch dies:

SELECT * FROM
  (SELECT ename, hiredate FROM emp ORDER BY hiredate)
WHERE ROWNUM < 6

Valid HTML 4.01! Valid CSS!

18.7. Wie selektiere ich nur bestimmte Zeilen (LIMIT unter MySQL)?
http://www.php-faq.de/q/q-oracle-limit.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team