Kategorien:

Abfragesyntax

LIMIT / FETCH

Begrenzt die maximale Anzahl von Zeilen, die von einer Anweisung oder Unterabfrage zurückgegeben werden. Sowohl LIMIT (Postgres-Syntax) als auch FETCH (ANSI-Syntax) werden unterstützt und liefern dasselbe Ergebnis.

Siehe auch:

TOP <n>

Syntax

-- Postgres syntax
SELECT ...
FROM ...
[ ORDER BY ... ]
LIMIT <count> [ OFFSET <start> ]
[ ... ]

-- ANSI syntax
SELECT ...
FROM ...
[ ORDER BY ... ]
[ OFFSET <start> ] [ { ROW | ROWS } ] FETCH [ { FIRST | NEXT } ] <count> [ { ROW | ROWS } ] [ ONLY ]
[ ... ]

Nutzungshinweise

  • Eine ORDER BY-Klausel ist nicht erforderlich. Ohne eine ORDER BY-Klausel sind die Ergebnisse jedoch nicht deterministisch, da Ergebnisse innerhalb eines Resultsets nicht notwendigerweise eine bestimmte Reihenfolge aufweisen. Verwenden Sie eine ORDER BY-Klausel, um die zurückgegebenen Ergebnisse zu kontrollieren.

  • Anzahl und Startwert müssen nicht negative Ganzzahlkonstanten sein.

    • Anzahl gibt die Anzahl der zurückgegebenen Zeilen an.

      Die Werte NULL, leere Zeichenfolge ('') und $$$$ werden ebenfalls akzeptiert und als „unbegrenzt“ behandelt. Dies ist vor allem für Konnektoren und Treiber (wie den JDBC-Treiber) hilfreich, wenn diese beim dynamischen Binden von Parametern an eine Anweisung eine unvollständige Parameterliste erhalten.

    • OFFSET Start gibt optional die Zeilenzahl an, nach der die begrenzten/abgerufenen Zeilen zurückgegeben werden. Wenn OFFSET weggelassen wird, beginnt die Ausgabe mit der ersten Zeile des Resultsets.

      Die Werte NULL, leere Zeichenfolge ('') und $$$$ werden ebenfalls akzeptiert und als 0 behandelt (d. h. es werden keine Zeilen übersprungen). Dies ist vor allem für Konnektoren und Treiber (wie den JDBC-Treiber) hilfreich, wenn diese beim dynamischen Binden von Parametern an eine Anweisung eine unvollständige Parameterliste erhalten.

  • ONLY Dieses optionale Schlüsselwort hat keinen Einfluss auf die Ausgabe. Es dient nur zur Verdeutlichung für den menschlichen Leser.

Beispiele

Die folgenden Beispiele zeigen die Auswirkung von LIMIT. Der Einfachheit halber wird in diesen Abfragen die ORDER BY-Klausel weggelassen und angenommen, dass die Ausgabereihenfolge immer dieselbe ist wie in der ersten Abfrage. Reale Abfragen sollten ``ORDER BY`` enthalten.

select c1 from testtable;

+------+
|   C1 |
|------|
|    1 |
|    2 |
|    3 |
|   20 |
|   19 |
|   18 |
|    1 |
|    2 |
|    3 |
|    4 |
| NULL |
|   30 |
| NULL |
+------+

select c1 from testtable limit 3 offset 3;

+----+
| C1 |
|----|
| 20 |
| 19 |
| 18 |
+----+

select c1 from testtable order by c1;

+------+
|   C1 |
|------|
|    1 |
|    1 |
|    2 |
|    2 |
|    3 |
|    3 |
|    4 |
|   18 |
|   19 |
|   20 |
|   30 |
| NULL |
| NULL |
+------+

select c1 from testtable order by c1 limit 3 offset 3;

+----+
| ID |
|----|
|  2 |
|  3 |
|  3 |
+----+

Das folgende Beispiel zeigt die Verwendung von NULLs zum Anzeigen

  • Keine Begrenzung der Zeilenanzahl.

  • Beginne bei Zeile 1 (keine Zeilen überspringen)

    CREATE TABLE demo1 (i INTEGER);
    INSERT INTO demo1 (i) VALUES (1), (2);
    
    SELECT * FROM demo1 ORDER BY i LIMIT NULL OFFSET NULL;
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+
    
    SELECT * FROM demo1 ORDER BY i LIMIT '' OFFSET '';
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+
    
    SELECT * FROM demo1 ORDER BY i LIMIT $$$$ OFFSET $$$$;
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+