ORDINA PER MySQL: Query ASC e DESC con esempio
โก Riepilogo intelligente
ORDINA PER MySQL Ordina i risultati delle query in ordine crescente o decrescente tramite le parole chiave ASC e DESC. Le sezioni seguenti illustrano la sintassi, l'ordinamento a colonna singola e a piรน colonne, l'inserimento di valori NULL e presentano esempi pratici eseguiti sul database di esempio myflixdb.
Cos'รจ ORDER BY in MySQL?
MySQL ORDINATO DA รจ una clausola utilizzata con la query SELECT per ordinare i dati in modo ordinato. MySQL La clausola ORDER BY ordina il set di risultati della query in ordine crescente o decrescente, in base a una singola colonna o a piรน colonne contemporaneamente.
Quando il comando SELECT viene utilizzato da solo, le righe vengono restituite nell'ordine in cui il motore di archiviazione le legge, che non รจ un ordine garantito. L'ordinamento consiste semplicemente nel riorganizzare tali righe in una sequenza specificata. Puรฒ essere eseguito su dati numerici, stringa e data.
MySQL ORDINA PER Sintassi
Prima di esaminare gli esempi, รจ utile capire dove si trova la clausola all'interno di un'istruzione SELECT completa.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
QUI
- "Istruzione SELECT... " รจ la normale query SELECT.
- "| " rappresenta alternative.
- โ[WHERE condizione | GROUP BY `nome_campo(i)` AVENDENDO condizione]โ รจ la condizione opzionale utilizzata per filtrare il set di risultati della query.
- "ORDINATO DA" Esegue l'ordinamento del set di risultati della query.
- โ[ASC | DESC]โ รจ la parola chiave utilizzata per ordinare il set di risultati in ordine crescente o decrescente. Nota che ASC รจ l'impostazione predefinita.
Cosa sono le parole chiave DESC e ASC?
ASC e DESC sono le due direzioni di ordinamento accettate dalla clausola ORDER BY. La tabella seguente le confronta per i tipi di dati che piรน spesso vengono ordinati.
ASC รจ la forma abbreviata per ascendente |
MySQL DESC รจ la forma abbreviata per discendente |
|---|---|
| Viene utilizzato per ordinare i risultati della query dall'alto al basso. | Viene utilizzato per ordinare i risultati della query dal basso verso l'alto. |
| Quando si lavora sui tipi di dati data, la prima data viene visualizzata in cima all'elenco. | Quando si lavora con dati di tipo data, la data piรน recente viene visualizzata in cima all'elenco. |
| Quando si lavora con tipi di dati numerici, i valori piรน bassi vengono visualizzati in cima all'elenco. | Quando si lavora con dati numerici, i valori piรน alti vengono visualizzati nella parte superiore del set di risultati della query. |
| Quando si lavora con tipi di dati stringa, il set di risultati della query viene ordinato da quelli che iniziano con la lettera A fino alla lettera Z. | Quando si lavora con tipi di dati stringa, il set di risultati della query viene ordinato da quelli che iniziano con la lettera Z fino alla lettera A. |
Entrambe le parole chiave SQL DESC e ASC vengono utilizzate insieme all'istruzione SELECT e MySQL Clausola ORDER BY.
Sintassi DESC e ASC
La parola chiave di ordinamento SQL DESC ha la seguente sintassi di base.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
QUI
- SELEZIONA {nome/i campo/i | *} FROM nome(i) tabella(i) รจ l'istruzione che contiene i campi e le tabelle da cui ottenere il set di risultati.
- [Condizione DOVE] รจ facoltativo ma puรฒ essere utilizzato per filtrare i dati in base alla condizione specificata.
- ORDINA PER nome(i) del campo รจ obbligatorio e specifica il campo su cui viene eseguito l'ordinamento. MySQL La parola chiave DESC specifica che l'ordinamento รจ in ordine decrescente.
- [LIMITE N] ร facoltativo, ma puรฒ essere utilizzato per limitare il numero di righe restituite dal set di risultati della query.
Perchรฉ utilizzare DESC e ASC in MySQL?
Conoscere la sintassi รจ solo metร del lavoro. La clausola ORDER BY esiste perchรฉ un set di risultati facile da produrre per un database non รจ sempre facile da leggere per una persona.
Supponiamo di dover stampare lo storico dei pagamenti di un abbonato alla videoteca, in modo che il personale della reception possa rispondere rapidamente alle richieste. ร molto piรน logico visualizzare i pagamenti in ordine cronologico decrescente, partendo dal piรน recente e risalendo fino al piรน vecchio. In SQL, la parola chiave che si rivela utile in questo caso รจ DESC, perchรฉ permette di ordinare l'elenco in base alla data di pagamento.
Supponiamo ora che il reparto marketing desideri un elenco di film per categoria, in modo che gli utenti possano vedere quali titoli sono disponibili in biblioteca prima di noleggiarli. Ordinare i nomi delle categorie e i titoli dei film in ordine crescente permette agli utenti di trovare rapidamente le informazioni, esattamente come farebbero in un indice. La parola chiave ASC serve proprio a questo scopo.
In breve, ORDER BY trasforma un set di risultati grezzi in un report. La parola chiave da scegliere dipende dalla domanda che il lettore si pone: cosa รจ successo di recente richieste per DESC, mentre Dove posso trovare questo articolo? richieste per ASC.
MySQL Esempio di ORDINA PER
Tutti gli esempi che seguono vengono eseguiti sul database di esempio myflixdb. Iniziate con la tabella dei membri non ordinata, che viene restituita nel suo ordine predefinito.
SELECT * FROM members;
Eseguendo lo script precedente in MySQL L'analisi con Workbench su myflixdb fornisce i seguenti risultati, mostrati di seguito.
| numero_iscrizione | nomi_completi | genere | data_di_nascita | indirizzo fisico | indirizzo_postale | numero di telefono | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Femmina | 21-07-1980 | Primo lotto di strada n. 4 | Borsa privata | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Femmina | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Roberto Fil | Maschio | 12-07-1989 | 3a strada 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Femmina | 14-02-1984 | 2a strada 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Maschio | NULL | Cresta di legno | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Maschio | NULL | Cresta di legno | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Maschio | NULL | Cresta di legno | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Maschio | 14-02-1984 | Cresta di legno | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Maschio | 24-08-1981 | Parco Sud | PO Box 4563 | 987786553 | NULL |
Ordinamento in ordine decrescente con DESC
Supponiamo che il reparto marketing desideri che i dettagli dei membri siano ordinati in ordine decrescente di data di nascita. Questo aiuta il team a inviare gli auguri di compleanno in modo tempestivo. L'elenco viene generato dalla query seguente.
SELECT * FROM members ORDER BY date_of_birth DESC;
Eseguendo lo script precedente in MySQL L'analisi con Workbench su myflixdb fornisce i seguenti risultati, mostrati di seguito.
Ordinamento in ordine crescente con ASC
La stessa query in ordine crescente semplicemente scambia la parola chiave.
SELECT * FROM members ORDER BY date_of_birth ASC;
Nota: NULL significa nessun valore, che non รจ la stessa cosa di zero o di una stringa vuota. Osservate in entrambe le schermate come le date NULL sono raggruppate: MySQL Il sistema considera NULL come valore inferiore a qualsiasi altro valore, pertanto le righe con NULL compaiono per prime nell'ordine ASC e per ultime nell'ordine DESC.
Come ordinare per piรน colonne in MySQL
L'ordinamento in base a una singola colonna risponde a domande semplici. I report, di solito, necessitano di un secondo livello di ordinamento e la clausola ORDER BY accetta un elenco di campi separati da virgole proprio a questo scopo.
Si consideri il seguente script di ordinamento SQL che elenca tutti i record dei membri senza alcuna istruzione esplicita.
SELECT * FROM `members`;
L'esecuzione dello script sopra riportato produce i seguenti risultati, mostrati di seguito.
| numero_iscrizione | nomi_completi | genere | data_di_nascita | indirizzo fisico | indirizzo_postale | numero di telefono | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Femmina | 21-07-1980 | Primo lotto di strada n. 4 | Borsa privata | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Femmina | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Roberto Fil | Maschio | 12-07-1989 | 3a strada 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Femmina | 14-02-1984 | 2a strada 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Maschio | NULL | Cresta di legno | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Maschio | NULL | Cresta di legno | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Maschio | NULL | Cresta di legno | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Maschio | 14-02-1984 | Cresta di legno | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Maschio | 24-08-1981 | Parco Sud | PO Box 4563 | 987786553 | NULL |
Ordinamento di una singola colonna in base all'ordine predefinito
Supponiamo di voler ottenere un elenco che ordini i risultati della query in base al campo "genere". Lo script seguente lo fa senza specificare una direzione.
SELECT * FROM `members` ORDER BY `gender`;
| numero_iscrizione | nomi_completi | genere | data_di_nascita | indirizzo fisico | indirizzo_postale | numero di telefono | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Femmina | 21-07-1980 | Primo lotto di strada n. 4 | Borsa privata | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Femmina | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Femmina | 14-02-1984 | 2a strada 23 | NULL | NULL | NULL |
| 3 | Roberto Fil | Maschio | 12-07-1989 | 3a strada 34 | NULL | 12345 | rm@tstreet.com |
| 5 | Leonard Hofstadter | Maschio | NULL | Cresta di legno | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Maschio | NULL | Cresta di legno | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Maschio | NULL | Cresta di legno | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Maschio | 14-02-1984 | Cresta di legno | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Maschio | 24-08-1981 | Parco Sud | PO Box 4563 | 987786553 | NULL |
I membri โfemmineโ vengono visualizzati per primi, seguiti dai membri โmaschiโ. Questo perchรฉ quando la clausola ORDER BY viene utilizzata senza specificare lโASC o MySQL DESCRIZIONE parola chiave, MySQL Per impostazione predefinita, ordina il set di risultati della query in ordine crescente.
Ordinamento di due colonne in direzioni opposte
Vediamo ora un esempio che esegue il ordinamento utilizzando due colonne. La prima colonna รจ ordinati in ordine ascendente di default, mentre la seconda colonna รจ ordinati in ordine decrescente.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Eseguendo lo script precedente in MySQL L'analisi con Workbench su myflixdb fornisce i seguenti risultati.
La colonna relativa al genere รจ stata ordinata in ordine crescente per impostazione predefinita, mentre la colonna relativa alla data di nascita รจ stata ordinata esplicitamente in ordine decrescente. Ogni parola chiave di direzione si applica solo alla colonna che segue.
Come combinare ORDER BY con WHERE, LIMIT e GROUP BY
ORDER BY รจ raramente l'unica clausola in una query di produzione. MySQL valuta sempre le clausole in una sequenza fissa, e conoscere tale sequenza spiega perchรฉ i risultati appaiono in quel modo.
- DA legge le righe dalla tabella.
- DOVE scarta le righe che non soddisfano la condizione.
- RAGGRUPPA PER raggruppa le righe rimanenti e applica la funzione HAVING ai filtri di tali gruppi.
- ORDINATO DA sequenze qualunque riga rimanga.
- LIMITE estrae il numero di righe richiesto dall'elenco ordinato.
Poichรฉ ORDER BY viene eseguito dopo WHERE e GROUP BY ma prima di LIMIT, una query come "i cinque membri piรน giovani di Woodcrest" viene espressa in un'unica istruzione.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
Lo stesso ordinamento si applica ai risultati raggruppati. I valori aggregati prodotti da funzioni aggregate I dati, ad esempio quelli relativi al conteggio, possono essere ordinati, in modo che la categoria piรน frequentata venga visualizzata in cima al report.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Suggerimento: ORDER BY puรฒ ordinare in base a un alias di colonna, a un'espressione o persino alla posizione nella colonna, come ORDER BY 3. L'ordinamento per posizione รจ fragile, perchรฉ l'inserimento di una nuova colonna nell'elenco SELECT modifica silenziosamente la chiave di ordinamento. ร preferibile assegnare un nome alla colonna.
Un punto relativo alle prestazioni vale la pena di essere ricordato. Quando la colonna ordinata contiene un indice, MySQL ร possibile leggere le righe nell'ordine dell'indice e saltare completamente l'ordinamento. Senza un indice, le tabelle di grandi dimensioni impongono un ordinamento dei file in memoria o su disco, che รจ la causa piรน comune del rallentamento delle query di report.


ASC รจ la forma abbreviata per ascendente
MySQL DESC รจ la forma abbreviata per discendente

