Probleem:
U wilt het aantal rijen in een resultaatset in MySQL beperken.
Voorbeeld:
Onze database heeft een tabel met de naam student
met gegevens in de kolommen id
, first_name
, last_name
, en age
.
id | voornaam | achternaam | leeftijd |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
4 | Maria | Bruin | 25 |
5 | Lucy | Watson | 25 |
6 | Michael | Jackson | 22 |
Laten we de volledige namen en leeftijden van de leerlingen selecteren, maar het aantal rijen beperken tot drie.
Oplossing:
SELECT first_name, last_name, age FROM student LIMIT 3;
Dit is het resultaat van de zoekopdracht:
id | voornaam | achternaam | leeftijd |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
Discussie:
De clausule LIMIT beperkt het aantal rijen in de resultatenset. Het wordt gebruikt in de SELECT-instructie, meestal aan het einde van de instructie. (Zelfs ORDER BY moet vóór LIMIT worden vermeld.)
Het enige vereiste argument is het aantal rijen dat moet worden weergegeven. In ons voorbeeld produceerde LIMIT 3 een resultatenset met drie rijen. Tenzij u anders specificeert met het OFFSET-argument, retourneert deze functie altijd de eerste n rijen die voldoen aan de vereisten voor zoekopdrachten.
Het optionele OFFSET-argument van LIMIT wordt vóór het argument geplaatst dat het aantal geretourneerde rijen aangeeft. Het geeft de positie aan van de eerste rij die wordt geretourneerd door LIMIT (d.w.z. '0' is de eerste rij, 1 is de tweede rij, enz.). De offset en het aantal rijen worden gescheiden door een komma.
De query retourneert dezelfde records als de vorige query omdat de offset nul is. (Nul is de standaard offsetwaarde.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
In deze query's zijn de resultaatrijen ongeordend. Als u drie rijen uit een gesorteerde resultatenset wilt selecteren, gebruikt u ORDER BY:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Hier ordenen we eerst de rijen op leeftijd (aflopend), dan achternaam en dan voornaam. We gebruiken de offsetwaarde om op de tweede geretourneerde rij te beginnen en de resultaten te beperken tot drie rijen:
voornaam | achternaam | leeftijd |
---|---|---|
Lucy | Watson | 25 |
Steven | Watson | 25 |
Michael | Jackson | 22 |
Deze query sorteert eerst rijen volgens de leeftijdskolom in aflopende volgorde. Het sorteert dan op last_name
en first_name
in oplopende volgorde. Als je naar de tafel kijkt, zie je dat de oudste leerlingen (Steven, Lucy, Mary) 25 jaar oud zijn. Mary wordt echter weggelaten omdat zij de eerste rij is en de offset 1 is (d.w.z. we beginnen met de tweede rij). Lucy is nu de eerste omdat haar voornaam vóór die van Steven komt. (Steven en Lucy hebben dezelfde achternaam, dus hun volgorde wordt bepaald door de voornaam.) Michael is 22, wat hem de op één na oudste student maakt en de laatste van de drie rijen die terugkwamen.