Direkt zum Inhalt
Urkunden
JSON-FunktionenTabellen & Schema ManagementMathe-FunktionenDatenbankenString-FunktionenAuslöserIndizesDatum FunktionenBasic Syntax

PostgreSQL OFFSET

Die `OFFSET` Klausel in PostgreSQL wird verwendet, um eine bestimmte Anzahl von Zeilen zu überspringen, bevor mit der Rückgabe von Zeilen aus einer Abfrage begonnen wird. Dies ist besonders nützlich für die Implementierung einer Paginierung in Ergebnismengen.

Verwendung

Die Klausel `OFFSET` wird normalerweise in Verbindung mit `LIMIT` verwendet, um Abfrageergebnisse zu paginieren, indem eine bestimmte Anzahl von Zeilen übersprungen wird. Sie wird nach der `ORDER BY`-Klausel gesetzt, um sicherzustellen, dass die Zeilen in einer vorhersehbaren Reihenfolge übersprungen werden.


SELECT column1, column2, ...
FROM table_name
[ORDER BY column]
OFFSET number_of_rows;

In dieser Syntax gibt `OFFSET number_of_rows` an, wie viele Zeilen am Anfang der Ergebnismenge ausgelassen werden sollen.

Beispiele

1. Basic Offset


SELECT *
FROM employees
OFFSET 10;

Diese Abfrage überspringt die ersten 10 Zeilen der Tabelle "Mitarbeiter" und gibt alle nachfolgenden Zeilen zurück.

2. Offset mit Grenze


SELECT *
FROM products
ORDER BY product_id
OFFSET 5
LIMIT 10;

Die Abfrage überspringt die ersten 5 Zeilen und gibt dann die nächsten 10 Zeilen zurück, so dass eine paginierte Ergebnismenge entsteht, die nach "product_id" geordnet ist.

3. Offset mit komplexer Abfrage


SELECT customer_id, order_date
FROM orders
WHERE order_status = 'completed'
ORDER BY order_date DESC
OFFSET 20
LIMIT 5;

Dieses Beispiel gibt 5 Zeilen zurück, nachdem die ersten 20 Zeilen der abgeschlossenen Bestellungen übersprungen wurden, sortiert nach "order_date" in absteigender Reihenfolge.

Tipps und bewährte Praktiken

  • Kombiniere mit `LIMIT`. Verwende `OFFSET` mit `LIMIT` für einen effektiven Seitenumbruch und um unnötige Datenabfragen zu vermeiden.
  • Sorge für eine einheitliche Bestellung. Verbinde immer `OFFSET` mit `ORDER BY`, um konsistente und vorhersehbare Ergebnisse zu gewährleisten.
  • Leistungsüberlegungen. Sei vorsichtig mit großen Offsets, da sie die Leistung beeinträchtigen können, da alle Zeilen bis zum Offset-Punkt weiterhin verarbeitet werden. Ziehe ggf. alternative Umbruchtechniken in Betracht.
  • Nullbasierte Indizierung. Denke daran, dass `OFFSET` nullbasiert ist, d.h. `OFFSET 0` wird alle Zeilen zurückgeben, ohne eine auszulassen.
  • Alternative Paginierungsmethoden. Bei großen Datensätzen solltest du alternative Methoden wie Cursor oder die Paginierung von Keysets in Betracht ziehen, die effizienter sein können, weil sie große Offset-Verarbeitungen vermeiden.