Kategorien:

Abfragesyntax

LIMIT / FETCH

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

Siehe auch:

TOP <n>

Syntax

PostgreSQL-Syntax

SELECT ...
FROM ...
[ ORDER BY ... ]
LIMIT <count> [ OFFSET <start> ]
[ ... ]
Copy

ANSI-Syntax

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

Parameter

count

Die Anzahl der zurückgegebenen Zeilen. Muss eine nicht-negative Ganzzahl-Konstante sein.

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

Die Zeilennummer, nach der die beschränkten/abgerufenen Zeilen zurückgegeben werden. Muss eine nicht-negative Ganzzahl-Konstante sein.

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

Optionales Schlüsselwort, das keinen Einfluss auf die Ausgabe hat Es wird zur Betonung für den menschlichen Leser verwendet.

Nutzungshinweise

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

  • TOP n und LIMIT count sind gleichwertig.

  • Sowohl die LIMIT-Klausel als auch die SAMPLE-Klausel geben eine Teilmenge von Zeilen aus einer Tabelle zurück. Wenn Sie die LIMIT-Klausel verwenden, gibt Snowflake die angegebene Anzahl von Zeilen auf schnellstmögliche Weise zurück. Wenn Sie die SAMPLE-Klausel verwenden, gibt Snowflake Zeilen auf der Grundlage der in der Klausel angegebenen Samplingmethode zurück.

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

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);
    
    Copy
    SELECT * FROM demo1 ORDER BY i LIMIT NULL OFFSET NULL;
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+
    
    Copy
    SELECT * FROM demo1 ORDER BY i LIMIT '' OFFSET '';
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+
    
    Copy
    SELECT * FROM demo1 ORDER BY i LIMIT $$$$ OFFSET $$$$;
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+
    
    Copy