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.

  • ๐Ÿ”  Comportamento predefinito: ORDER BY ordina in ordine crescente quando non viene specificato nรฉ ASC nรฉ DESC, quindi ASC รจ facoltativo nella maggior parte delle istruzioni.
  • โฌ†๏ธ Parola chiave ASC: ASC ordina i numeri dal piรน basso al piรน alto, le stringhe dalla A alla Z e le date dalla piรน antica alla piรน recente.
  • โฌ‡๏ธ DESCRIZIONE Parola chiave: DESC inverte tale sequenza, il che si adatta alle cronologie dei pagamenti piรน recenti e agli elenchi di date di nascita in ordine decrescente.
  • ๐Ÿงฎ Ordinamento a piรน colonne: L'ordine delle colonne รจ importante. ORDER BY gender, date_of_birth DESC ordina prima il genere in ordine crescente, poi le date in ordine decrescente all'interno di ciascun gruppo.
  • ๐Ÿ”Ž Combinazione di clausole: WHERE filtra le righe, GROUP BY le aggrega, ORDER BY ordina il risultato e LIMIT lo tronca.
  • โš™๏ธ Fattore di prestazione: Un indice sulla colonna ordinata consente MySQL per evitare un'operazione di ordinamento su tabelle di grandi dimensioni.

ORDINA PER MySQL

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.

Parole chiave DESC e ASCASC รจ la forma abbreviata per ascendente Parole chiave DESC e ASCMySQL 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 email
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.

MySQL risultato della query ORDER BY DESC

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;

MySQL Risultato della query ORDER BY 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 email
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 email
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.

MySQL Esempio di ordinamento per due colonne

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.

  1. DA legge le righe dalla tabella.
  2. DOVE scarta le righe che non soddisfano la condizione.
  3. RAGGRUPPA PER raggruppa le righe rimanenti e applica la funzione HAVING ai filtri di tali gruppi.
  4. ORDINATO DA sequenze qualunque riga rimanga.
  5. 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.

DOMANDE FREQUENTI

Puรฒ succedere. Senza un indice sulla colonna ordinata, MySQL Esegue un ordinamento dei file sull'intero set di risultati. L'aggiunta di un indice che corrisponde alla colonna e alla direzione di ORDER BY consente al server di leggere le righe in ordine e di saltare questo passaggio.

Di solito no. Le regole di confronto predefinite come utf8mb4_0900_ai_ci non distinguono tra maiuscole e minuscole, quindi "apple" e "Apple" vengono ordinati insieme. Una regola di confronto binaria o _cs, oppure ORDER BY BINARY column_name, produce un ordinamento che distingue tra maiuscole e minuscole, in cui le lettere maiuscole vengono prima.

Sรฌ. ORDER BY RAND() mescola il set di risultati, il che รจ utile per selezionare un film o un membro a caso. Assegna un punteggio a ogni riga prima di ordinarla, quindi รจ consigliabile utilizzarla in combinazione con LIMIT ed evitarla su tabelle molto grandi.

Sรฌ. Gli assistenti IA integrati in strumenti come MySQL banco di lavoro Trasforma le richieste in linguaggio naturale in istruzioni SELECT con ORDER BY. Verifica sempre la colonna di ordinamento e la direzione generate, perchรฉ un'IA non puรฒ sapere quale ordinamento richiede il tuo report.

In parte. I sistemi di intelligenza artificiale analizzano i log delle query lente e suggeriscono indici che eliminano le operazioni di ordinamento dei file. I suggerimenti necessitano comunque di una revisione umana, poichรฉ ogni indice aggiuntivo rallenta le operazioni di inserimento e aggiornamento sulla stessa tabella.

Riassumi questo post con: