sql >> Database teknologi >  >> RDS >> Mysql

Sådan begrænser du rækker i et MySQL-resultatsæt

Problem:

Du vil gerne begrænse antallet af rækker i et resultatsæt i MySQL.

Eksempel:

Vores database har en tabel ved navn student med data i kolonnerne id , first_name , last_name og age .

id fornavn efternavn alder
1 Steven Watson 25
2 Lisa Anderson 19
3 Alice Møller 19
4 Mary Brun 25
5 Lucy Watson 25
6 Michael Jackson 22

Lad os vælge elevernes fulde navne og alder, men begrænse antallet af returnerede rækker til tre.

Løsning:

SELECT first_name, last_name, age
FROM student
LIMIT 3;

Her er resultatet af forespørgslen:

id fornavn efternavn alder
1 Steven Watson 25
2 Lisa Anderson 19
3 Alice Møller 19

Diskussion:

LIMIT-sætningen begrænser antallet af rækker i resultatsættet. Det bruges i SELECT-sætningen, normalt i slutningen af ​​sætningen. (Selv ORDER BY skal være anført før LIMIT.)

Det eneste nødvendige argument er antallet af rækker, der skal vises. I vores eksempel producerede LIMIT 3 et resultatsæt indeholdende tre rækker. Medmindre du angiver andet med OFFSET-argumentet, vil denne funktion altid returnere det første n rækker, der opfylder forespørgselskravene.

LIMITs valgfrie OFFSET-argument placeres før argumentet, der angiver antallet af returnerede rækker. Det angiver positionen for den første række returneret af LIMIT (dvs. '0' er den første række, 1 er den anden række osv.). Forskydningen og antallet af rækker er adskilt af et komma.

Forespørgslen returnerer de samme poster som den forrige forespørgsel, fordi forskydningen er nul. (Nul er standardforskydningsværdien.)

SELECT first_name, last_name, age
FROM student
LIMIT 0, 3;

I disse forespørgsler er resultatrækkerne uordnede. Hvis du gerne vil vælge tre rækker fra et sorteret resultatsæt, skal du bruge BESTIL EFTER:

SELECT first_name, last_name, age
FROM student
ORDER BY age DESC, last_name, first_name
LIMIT 1,3;

Her sorterer vi først rækkerne efter alder (faldende), derefter efternavn og derefter fornavn. Vi bruger offsetværdien til at starte på den anden returnerede række og begrænser resultaterne til tre rækker:

fornavn efternavn alder
Lucy Watson 25
Steven Watson 25
Michael Jackson 22

Denne forespørgsel sorterer først rækker efter alderskolonnen i faldende rækkefølge. Den sorterer derefter efter last_name og first_name i stigende rækkefølge. Hvis du ser på tabellen, vil du se, at de ældste elever (Steven, Lucy, Mary) er 25 år. Mary er dog udeladt, fordi hun er den første række, og forskydningen er 1 (dvs. vi starter med den anden række). Lucy er nu først, fordi hendes fornavn kommer før Stevens. (Steven og Lucy har samme efternavn, så deres rækkefølge bestemmes af fornavnet.) Michael er 22, hvilket gør ham til den næstældste elev og den sidste af de tre rækker, der er returneret.


  1. Kom godt i gang med Django-kanaler

  2. Brug af JDeveloper med MySQL-database og Oracle-database på AWS RDS, del 3

  3. PARSE() vs TRY_PARSE() i SQL Server:Hvad er forskellen?

  4. Mærkelig SQLAlchemy-fejlmeddelelse:TypeError:'dict'-objekt understøtter ikke indeksering