sql >> Databasteknik >  >> RDS >> Mysql

Hur man begränsar rader i en MySQL-resultatuppsättning

Problem:

Du vill begränsa antalet rader i en resultatuppsättning i MySQL.

Exempel:

Vår databas har en tabell som heter student med data i kolumnerna id , first_name , last_name och age .

id förnamn efternamn ålder
1 Steven Watson 25
2 Lisa Anderson 19
3 Alice Miller 19
4 Maria Brun 25
5 Lucy Watson 25
6 Michael Jackson 22

Låt oss välja elevernas fullständiga namn och ålder, men begränsa raderna som returneras till tre.

Lösning:

SELECT first_name, last_name, age
FROM student
LIMIT 3;

Här är resultatet av frågan:

id förnamn efternamn ålder
1 Steven Watson 25
2 Lisa Anderson 19
3 Alice Miller 19

Diskussion:

LIMIT-satsen begränsar antalet rader i resultatuppsättningen. Det används i SELECT-satsen, vanligtvis i slutet av satsen. (Även ORDER BY bör anges före LIMIT.)

Det enda nödvändiga argumentet är antalet rader som ska visas. I vårt exempel producerade LIMIT 3 en resultatuppsättning som innehåller tre rader. Om du inte anger något annat med OFFSET-argumentet kommer denna funktion alltid att returnera det första n rader som uppfyller frågekraven.

LIMITs valfria OFFSET-argument placeras före argumentet som anger antalet returnerade rader. Den indikerar positionen för den första raden som returneras av LIMIT (dvs '0' är den första raden, 1 är den andra raden, etc.). Förskjutningen och antalet rader separeras med ett kommatecken.

Frågan returnerar samma poster som den föregående frågan eftersom förskjutningen är noll. (Noll är standardvärdet för offset.)

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

I dessa frågor är resultatraderna oordnade. Om du vill välja tre rader från en sorterad resultatuppsättning, använd ORDER BY:

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

Här sorterar vi först raderna efter ålder (fallande), sedan efternamn och sedan förnamn. Vi använder offsetvärdet för att börja på den andra returnerade raden och begränsa resultaten till tre rader:

förnamn efternamn ålder
Lucy Watson 25
Steven Watson 25
Michael Jackson 22

Den här frågan sorterar först rader enligt ålderskolumnen i fallande ordning. Den sorteras sedan efter last_name och first_name i stigande ordning. Om du tittar på tabellen ser du att de äldsta eleverna (Steven, Lucy, Mary) är 25 år gamla. Mary är dock utelämnad eftersom hon är den första raden och förskjutningen är 1 (dvs. vi börjar med den andra raden). Lucy är nu först eftersom hennes förnamn kommer före Stevens. (Steven och Lucy har samma efternamn, så deras ordning bestäms av förnamnet.) Michael är 22, vilket gör honom till den näst äldsta eleven och den sista av de tre raderna som kommer tillbaka.


  1. Skillnaden mellan SELECT INTO och INSERT INTO i MySQL

  2. Hur man ansluter till en MySQL-datakälla i Visual Studio

  3. SQL CASE:Känn till och undvik 3 mindre kända problem

  4. Optimera TempDB:Undvika flaskhalsar och prestandaproblem