Problema:
Vorresti limitare il numero di righe in un set di risultati in MySQL.
Esempio:
Il nostro database ha una tabella denominata student
con i dati nelle colonne id
, first_name
, last_name
e age
.
id | nome | cognome | età |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Mugnaio | 19 |
4 | Maria | Marrone | 25 |
5 | Lucia | Watson | 25 |
6 | Michele | Jackson | 22 |
Selezioniamo i nomi completi e l'età degli studenti, ma limitiamo le righe restituite a tre.
Soluzione:
SELECT first_name, last_name, age FROM student LIMIT 3;
Ecco il risultato della query:
id | nome | cognome | età |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Mugnaio | 19 |
Discussione:
La clausola LIMIT limita il numero di righe nel set di risultati. Viene utilizzato nell'istruzione SELECT, di solito alla fine dell'istruzione. (Anche ORDER BY dovrebbe essere elencato prima di LIMIT.)
L'unico argomento richiesto è il numero di righe da visualizzare. Nel nostro esempio, LIMIT 3 ha prodotto un set di risultati contenente tre righe. A meno che non specifichi diversamente con l'argomento OFFSET, questa funzione restituirà sempre il primo n righe che soddisfano i requisiti della query.
L'argomento OFFSET facoltativo di LIMIT viene posizionato prima dell'argomento che indica il numero di righe restituite. Indica la posizione della prima riga restituita da LIMIT (cioè '0' è la prima riga, 1 è la seconda riga, ecc.). L'offset e il numero di righe sono separati da una virgola.
La query restituisce gli stessi record della query precedente perché l'offset è zero. (Zero è il valore di offset predefinito.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
In queste query, le righe dei risultati non sono ordinate. Se desideri selezionare tre righe da un set di risultati ordinato, utilizza ORDER BY:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Qui, ordiniamo prima le righe in base all'età (decrescente), quindi al cognome, quindi al nome. Usiamo il valore di offset per iniziare sulla seconda riga restituita e limitiamo i risultati a tre righe:
first_name | cognome | età |
---|---|---|
Lucia | Watson | 25 |
Steven | Watson | 25 |
Michele | Jackson | 22 |
Questa query prima ordina le righe in base alla colonna dell'età in ordine decrescente. Quindi ordina per last_name
e first_name
in ordine crescente. Se guardi il tavolo, vedrai che gli studenti più grandi (Steven, Lucy, Mary) hanno 25 anni. Tuttavia, Mary viene omessa perché è la prima riga e l'offset è 1 (cioè iniziamo con la seconda riga). Lucy è ora la prima perché il suo nome viene prima di quello di Steven. (Steven e Lucy hanno lo stesso cognome, quindi il loro ordine è determinato dal nome.) Michael ha 22 anni, il che lo rende il secondo studente più anziano e l'ultima delle tre righe restituite.