Zeilen in PostgreSQL begrenzen

Bilal Shahid 15 Februar 2024
  1. Verwenden Sie die LIMIT-Klausel, um Zeilen in PostgreSQL zu begrenzen
  2. Verwenden Sie die Klausel FETCH FIRST, um Zeilen in PostgreSQL zu begrenzen
Zeilen in PostgreSQL begrenzen

In PostgreSQL können wir die Anweisung SELECT verwenden, um Zeilen aus einer Tabelle aufzulisten. Wenn wir jedoch nur ausgewählte Zeilen auflisten wollen, müssen wir entsprechend verschiedene Klauseln verwenden.

Eine Klausel, die mit der SELECT-Anweisung verwendet wird, um ausgewählte Zeilen aus einer Tabelle anzuzeigen, ist die LIMIT-Klausel. Die Klausel LIMIT kann die Anzahl der in den resultierenden Daten aufgelisteten Zeilen einschränken.

Dieser Artikel beschreibt das Schlüsselwort LIMIT und seine Verwendung in PostgreSQL.

Verwenden Sie die LIMIT-Klausel, um Zeilen in PostgreSQL zu begrenzen

Die Syntax der LIMIT-Klausel ist unten dargestellt:

LIMIT { count }

Hier bezieht sich das Feld count auf die Anzahl der Zeilen, die gezählt und angezeigt werden. Das Schlüsselwort ALL kann anstelle von count verwendet werden, um alle von der Abfrage zurückgegebenen Zeilen anzuzeigen, was denselben Effekt hat wie kein Limit.

Lassen Sie uns anhand einer Beispieldatenbank mit der folgenden Tabelle verstehen, wie die Klausel LIMIT verwendet wird:

create table dummy
(
num int not null,
constraint PK primary key (num)
);

Lassen Sie uns nun diese Beispieltabelle mit einigen Werten füllen:

insert into dummy values (150), (120), (330), (240), (150), (60), (270), (110), (400), (350);

Wenn wir eine einfache SELECT * from dummy-Anweisung verwenden, um die Zeilen dieser Tabelle aufzulisten, erhalten wir das folgende Ergebnis:

PostgreSQL LIMIT - Ausgabe 1

Was ist, wenn wir nur die ersten fünf Zeilen anzeigen möchten? Dafür können wir ganz einfach die LIMIT-Klausel verwenden.

Es ist eine optionale Funktionalität der SELECT-Anweisung, die auf folgende Weise verwendet werden kann:

SELECT * from dummy
LIMIT 5;

Dadurch werden nur die ersten fünf Zeilen der Tabelle aufgelistet:

PostgreSQL LIMIT - Ausgabe 2

Hinweis: Wenn der Wert der in der LIMIT-Klausel angegebenen Zeilen größer ist als die in der Tabelle vorhandenen Zeilen, werden alle Tabellenzeilen angezeigt.

Die Verwendung der LIMIT-Klausel ist jedoch nicht sehr sinnvoll, wenn die Zeilen nicht sortiert sind, was bedeutet, dass ihre Reihenfolge nicht vorhersehbar ist, und die LIMIT-Abfrage kann unterschiedliche Ergebnisse anzeigen. Dem können wir entgegenwirken, indem wir die LIMIT-Klausel mit der ORDER BY-Klausel in der SELECT-Abfrage verwenden.

Mit dem Befehl ORDER BY können Sie die Daten basierend auf einem oder mehreren Attributen aus der Tabelle sortieren. Mit diesem Satz von Attributen können Sie auch in aufsteigender oder absteigender Reihenfolge sortieren.

Betrachten wir die Auswirkung der Verwendung der LIMIT-Klausel mit ORDER BY auf unsere dummy-Tabelle. Der Code wird wie folgt sein:

SELECT * from dummy
ORDER BY num
LIMIT 5;

Dies wird uns das folgende Ergebnis liefern:

PostgreSQL LIMIT - Ausgabe 3

Wir können sehen, dass die Abfrage die fünf kleinsten Werte von num zurückgegeben hat, weil die ORDER BY-Klausel die Daten standardmäßig in aufsteigender Reihenfolge sortiert hat. Daher können wir die Klauseln LIMIT und ORDER BY verwenden, um die höchste oder niedrigste angegebene Anzahl von Werten abzurufen.

Was ist, wenn wir die Zeilen ab der ersten nicht anzeigen möchten? Die LIMIT-Klausel gewährt uns auch hierfür Flexibilität.

Die Syntax sieht dann so aus:

LIMIT { count }
OFFSET { start }

Der Wert anstelle von start gibt die Anzahl Zeilen an, die übersprungen werden, bevor die angegebene Anzahl Zeilen angezeigt wird. Das bedeutet, dass die start-Zeilenzahl übersprungen wird und die nächste count-Zeilenzahl als Ausgabe ausgegeben wird.

Hinweis: Wenn der in der Klausel OFFSET angegebene Wert von start grösser ist als die in der Tabelle vorhandenen Zeilen, werden keine Tabellenzeilen angezeigt.

Lassen Sie uns die Verwendung von OFFSET demonstrieren, indem Sie die folgende Abfrage auf der dummy-Tabelle ausführen:

SELECT * from dummy
ORDER BY num
LIMIT 5
OFFSET 2;

Dieser Code beginnt in der dritten Zeile, überspringt die ersten beiden wie angegeben und zeigt dann die nächsten fünf wie folgt an:

PostgreSQL LIMIT - Ausgabe 4

Hinweis: Wenn der Wert anstelle von count auf NULL gesetzt wird, hat dies den gleichen Effekt wie kein Limit und zeigt alle resultierenden Zeilen an. Wenn der Wert anstelle von start auf NULL gesetzt wird, hat dies die gleiche Wirkung wie OFFSET 0 und beginnt mit der Anzeige ab der ersten Zeile.

PostgreSQL bietet ein Äquivalent zur LIMIT-Klausel, mit der wir nur die erforderliche Anzahl von Zeilen aus einer Tabelle ausgeben können. Dies wird weiter unten erläutert.

Verwenden Sie die Klausel FETCH FIRST, um Zeilen in PostgreSQL zu begrenzen

Eine Alternative zur LIMIT-Klausel ist die FETCH FIRST-Klausel, die folgende Syntax hat:

FETCH FIRST { count } ROWS ONLY;

Auch hier wird count durch die Anzahl der anzuzeigenden Zeilen ersetzt. Sehen wir uns an, wie die Klausel FETCH FIRST im Code verwendet wird, indem wir dieselbe dummy-Tabelle verwenden:

SELECT * from dummy
ORDER BY num
FETCH FIRST 5 ROWS ONLY;

Dies hat den gleichen Effekt wie das Schreiben von LIMIT 5 und zeigt die folgenden resultierenden Zeilen an:

PostgreSQL FIRST FETCH - Ausgabe 1

Wenn wir jedoch nicht die Zeilen beginnend mit der ersten anzeigen möchten, können wir die OFFSET-Klausel mit FETCH FIRST verwenden. Dies wird folgendermaßen geschrieben:

OFFSET { start }
FETCH FIRST { count } ROWS ONLY;

Lassen Sie uns dies in unserer dummy-Tabelle in Form dieser Abfrage verwenden:

SELECT * from dummy
ORDER BY num
OFFSET 2
FETCH FIRST 5 ROWS ONLY;

Dadurch werden die folgenden Zeilen abgerufen und gedruckt, nachdem die ersten beiden übersprungen wurden:

PostgreSQL FIRST FETCH - Ausgabe 2

Dies fasst die verschiedenen Möglichkeiten zusammen, wie die LIMIT-Klausel in PostgreSQL verwendet wird, um die Anzahl der angezeigten Zeilen zu beschränken, die aus einer SELECT-Abfrage resultieren. Wir hoffen, dass Sie die Verwendung der Befehle LIMIT und FETCH FIRST als Alternativen zueinander gelernt haben.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Verwandter Artikel - PostgreSQL Table