- 1 1. Introduzione
- 2 2. Sintassi di base della clausola ORDER BY
- 3 3. Ordinamento per più colonne
- 4 4. Gestione dei valori NULL
- 5 5. Combinazione di ORDER BY con WHERE
- 6 6. Utilizzo di ORDER BY con GROUP BY
- 7 7. ORDER BY Avanzato: Ordinamento di Date e Stringhe
- 8 8. Ottimizzazione delle Prestazioni per ORDER BY
- 9 9. Riassunto
1. Introduzione
MySQL è un database relazionale ampiamente utilizzato per applicazioni web e gestione di database. Tra le sue numerose funzionalità, la clausola ORDER BY è uno strumento essenziale per organizzare i dati recuperati in base a criteri specifici. In questo articolo, spiegheremo le basi della clausola ORDER BY, l’ordinamento per più colonne, la gestione dei valori NULL e l’ottimizzazione delle prestazioni. Per facilitare la comprensione, includeremo esempi concreti e tabelle visive.
2. Sintassi di base della clausola ORDER BY
La clausola ORDER BY viene utilizzata per ordinare i dati recuperati da un database in ordine ascendente (ASC) o discendente (DESC). Specificando la colonna di destinazione per l’ordinamento, è possibile presentare i dati in modo più organizzato.
Sintassi di base
SELECT * FROM table_name
ORDER BY column_name ASC | DESC;
- Ascendente (ASC) : Ordina i valori dal più piccolo al più grande. Se non è specificata alcuna parola chiave,
ASCè il valore predefinito. - Discendente (DESC) : Ordina i valori dal più grande al più piccolo.
Esempio
La query seguente ordina i dati dei clienti per età in ordine ascendente:
SELECT * FROM customers
ORDER BY age ASC;
Figura 1: Dati clienti prima dell’ordinamento
Name | Age | Indirizzo |
|---|---|---|
Yamada | 40 | Tokyo |
Sato | 25 | Osaka |
Suzuki | 35 | Nagoya |
Figura 2: Dati clienti dopo l’ordinamento
Name | Age | Indirizzo |
|---|---|---|
Sato | 25 | Osaka |
Suzuki | 35 | Nagoya |
Yamada | 40 | Tokyo |
Nota importante
La clausola ORDER BY deve apparire alla fine di un’istruzione SELECT. Se vengono utilizzate altre clausole come WHERE o GROUP BY, ORDER BY viene dopo di esse.

3. Ordinamento per più colonne
La clausola ORDER BY consente l’ordinamento per più colonne, permettendo un’organizzazione più dettagliata. Ad esempio, se due righe condividono lo stesso valore nella prima colonna, la seconda colonna viene utilizzata come criterio di parità.
Esempio di sintassi
SELECT * FROM table_name
ORDER BY column1 ASC, column2 DESC;
Esempio pratico
La query seguente ordina i clienti per indirizzo in ordine discendente e poi per età in ordine ascendente:
SELECT * FROM customers
ORDER BY address DESC, age ASC;
Figura 3: Risultato dell’ordinamento multi-colonna
Name | Indirizzo | Age |
|---|---|---|
Yamada | Tokyo | 40 |
Sato | Osaka | 25 |
Suzuki | Nagoya | 35 |
In questo modo, i dati vengono prima ordinati per address in ordine discendente. Se più clienti condividono lo stesso indirizzo, vengono ordinati per age in ordine ascendente.
4. Gestione dei valori NULL
In SQL, un valore NULL significa “non esiste alcun valore”. Quando si utilizza la clausola ORDER BY, i valori NULL vengono trattati in modo speciale. Con ASC, i valori NULL appaiono per primi, mentre con DESC, appaiono per ultimi.
Comportamento dei valori NULL
- Ascendente (ASC) : I valori
NULLvengono mostrati per primi. - Discendente (DESC) : I valori
NULLvengono mostrati per ultimi.
Esempio
La query seguente mostra i prodotti con prezzi NULL per primi, seguiti dal resto in ordine ascendente:
SELECT * FROM products
ORDER BY price ASC;
Figura 4: Risultati dell’ordinamento con valori NULL
Prodotto | Prezzo |
|---|---|
Prodotto A | NULL |
Prodotto B | 1000 |
Prodotto C | 2000 |
Come visualizzare i valori NULL per ultimi
Se si desidera che i valori NULL appaiano per ultimi, è possibile utilizzare la funzione ISNULL().
SELECT * FROM products
ORDER BY ISNULL(price), price ASC;

5. Combinazione di ORDER BY con WHERE
Combinando la clausola WHERE con ORDER BY, è possibile filtrare i record che corrispondono a condizioni specifiche e poi ordinarli. Questo aiuta a organizzare e visualizzare i dati in modo più efficiente.
Sintassi di base
SELECT * FROM table_name
WHERE condition
ORDER BY column_name ASC | DESC;
Esempio
La query seguente seleziona i clienti di età pari o superiore a 30 anni e li ordina per nome in ordine ascendente:
SELECT * FROM customers
WHERE age >= 30
ORDER BY name ASC;
Questa query filtra prima i dati, poi applica l’ordinamento.
6. Utilizzo di ORDER BY con GROUP BY
La clausola GROUP BY raggruppa i dati per una colonna specifica, e la clausola ORDER BY può quindi essere utilizzata per ordinare i risultati raggruppati.
Esempio
La query seguente conta i clienti per regione e ordina il risultato in ordine discendente:
SELECT region, COUNT(*)
FROM customers
GROUP BY region
ORDER BY COUNT(*) DESC;
Figura 5: Risultati di aggregazione ordinati
Region | Conteggio Clienti |
|---|---|
Tokyo | 50 |
Osaka | 30 |
Nagoya | 20 |

7. ORDER BY Avanzato: Ordinamento di Date e Stringhe
La clausola ORDER BY può anche ordinare colonne di date e stringhe. Ad esempio, è utile per visualizzare i record più recenti per primi o per ordinare alfabeticamente.
Ordinamento per Data
SELECT * FROM orders
ORDER BY order_date DESC;
Questa query visualizza gli ordini più recenti per primi.
Ordinamento per Stringhe
La seguente query ordina i nomi dei dipendenti alfabeticamente:
SELECT * FROM employees
ORDER BY name ASC;
8. Ottimizzazione delle Prestazioni per ORDER BY
Ordinare grandi dataset può influire sulle prestazioni. Ecco alcune tecniche per ottimizzare le query che utilizzano ORDER BY.
Utilizzo degli Indici
Aggiungere un indice alla colonna che viene ordinata può migliorare le prestazioni della query:
CREATE INDEX idx_column_name ON table_name(column_name);
Utilizzo di LIMIT con ORDER BY
La clausola LIMIT limita il numero di righe restituite dopo l’ordinamento, riducendo il tempo di esecuzione e i costi di elaborazione:
SELECT * FROM customers
ORDER BY age ASC
LIMIT 10;
Gestione di Grandi Dataset
Per dataset molto grandi, regolare le impostazioni di MySQL può migliorare le prestazioni. Ad esempio, aumentare sort_buffer_size permette di utilizzare più memoria per l’ordinamento:
SET GLOBAL sort_buffer_size = 2M;
È anche importante utilizzare EXPLAIN per esaminare il piano di esecuzione della query e identificare opportunità di ottimizzazione:
EXPLAIN SELECT * FROM customers ORDER BY age ASC;

9. Riassunto
In questo articolo, abbiamo trattato la clausola ORDER BY di MySQL dalle basi ai casi d’uso avanzati. La clausola ORDER BY è cruciale per organizzare i dati e può gestire l’ordine ascendente/discendente, l’ordinamento multi-colonna e casi speciali come i valori NULL.
Abbiamo anche discusso l’ottimizzazione delle prestazioni, inclusi l’uso degli indici, LIMIT e la regolazione di sort_buffer_size per gestire dataset grandi in modo più efficiente.
Padroneggiando la clausola ORDER BY, puoi ordinare i dati in modo efficace e migliorare le prestazioni sia delle applicazioni che dei database. Assicurati di applicare queste tecniche in progetti reali.
Casi d’Uso Pratici per ORDER BY
Ecco alcuni scenari comuni in cui ORDER BY è essenziale nella pratica:
- Generazione di Report : Ad esempio, quando si creano report di vendite, puoi ordinare i prodotti per fatturato o elencare le prestazioni di vendita regionali in ordine.
- Implementazione della Paginazione : Nelle applicazioni web, puoi utilizzare
ORDER BYconLIMITper visualizzare dati ordinati su più pagine in modo efficiente. - Pulizia del Database : Quando si eliminano record vecchi o si recuperano voci specifiche per la manutenzione,
ORDER BYrende facile identificare e gestire i dati giusti.
Questi sono casi d’uso quotidiani comuni in cui la clausola ORDER BY può migliorare notevolmente l’organizzazione dei dati e l’efficienza del flusso di lavoro.


