sql >> Database >  >> RDS >> Mysql

Hoe rijen in een MySQL-resultatenset te beperken

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.


  1. Hoe COUNT() werkt in SQL Server

  2. Leer hoe u omgaat met uitzonderingen in PL/SQL

  3. Laat alle tabellen vallen waarvan de naam begint met een bepaalde tekenreeks

  4. LongOpsWatcher in SQL Dev