- Kategorien:
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:
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.
count
undstart
müssen nicht negative Ganzzahlkonstanten sein.count
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. WennOFFSET
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>
undLIMIT <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 | +---+