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.

  • TOP <n> und LIMIT <Anzahl> sind gleichwertig.

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 wie in der ersten Abfrage ist. 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 NULL-Werten, um Folgendes anzugeben

  • 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 |
    +---+