Problem:
Sie möchten die Anzahl der Zeilen in einer Ergebnismenge in MySQL begrenzen.
Beispiel:
Unsere Datenbank hat eine Tabelle namens student
mit Daten in den Spalten id
, first_name
, last_name
, und age
.
id | Vorname | Nachname | Alter |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Müller | 19 |
4 | Maria | Braun | 25 |
5 | Lucy | Watson | 25 |
6 | Michael | Jackson | 22 |
Lassen Sie uns die vollständigen Namen und das Alter der Schüler auswählen, aber die zurückgegebenen Zeilen auf drei beschränken.
Lösung:
SELECT first_name, last_name, age FROM student LIMIT 3;
Hier ist das Ergebnis der Abfrage:
id | Vorname | Nachname | Alter |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Müller | 19 |
Diskussion:
Die LIMIT-Klausel begrenzt die Anzahl der Zeilen in der Ergebnismenge. Es wird in der SELECT-Anweisung verwendet, normalerweise am Ende der Anweisung. (Sogar ORDER BY sollte vor LIMIT aufgeführt werden.)
Das einzige erforderliche Argument ist die Anzahl der anzuzeigenden Zeilen. In unserem Beispiel hat LIMIT 3 eine Ergebnismenge mit drei Zeilen erzeugt. Sofern Sie mit dem OFFSET-Argument nichts anderes angeben, gibt diese Funktion immer das erste n zurück Zeilen, die die Abfrageanforderungen erfüllen.
Das optionale OFFSET-Argument von LIMIT wird vor dem Argument platziert, das die Anzahl der zurückgegebenen Zeilen angibt. Es gibt die Position der ersten Zeile an, die von LIMIT zurückgegeben wird (d. h. ‚0‘ ist die erste Zeile, 1 ist die zweite Zeile usw.). Der Offset und die Anzahl der Zeilen werden durch ein Komma getrennt.
Die Abfrage gibt dieselben Datensätze wie die vorherige Abfrage zurück, da der Offset Null ist. (Null ist der Standard-Offsetwert.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
In diesen Abfragen sind die Ergebniszeilen unsortiert. Wenn Sie drei Zeilen aus einer sortierten Ergebnismenge auswählen möchten, verwenden Sie ORDER BY:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Hier ordnen wir die Zeilen zuerst nach Alter (absteigend), dann Nachname, dann Vorname. Wir verwenden den Offset-Wert, um mit der zweiten zurückgegebenen Zeile zu beginnen und die Ergebnisse auf drei Zeilen zu begrenzen:
Vorname | Nachname | Alter |
---|---|---|
Lucy | Watson | 25 |
Steven | Watson | 25 |
Michael | Jackson | 22 |
Diese Abfrage sortiert zuerst Zeilen nach der Altersspalte in absteigender Reihenfolge. Dann wird nach last_name
sortiert und first_name
in aufsteigender Reihenfolge. Wenn Sie sich die Tabelle ansehen, sehen Sie, dass die ältesten Schüler (Steven, Lucy, Mary) 25 Jahre alt sind. Mary wird jedoch weggelassen, weil sie die erste Reihe ist und der Offset 1 ist (d. h. wir beginnen mit der zweiten Reihe). Lucy steht jetzt an erster Stelle, weil ihr Vorname vor dem von Steven steht. (Steven und Lucy haben denselben Nachnamen, daher wird ihre Reihenfolge nach dem Vornamen bestimmt.) Michael ist 22, was ihn zum zweitältesten Schüler und letzten der drei zurückgegebenen Reihen macht.