Torna all'elenco degli articoli Articoli
Tempo di lettura: 6 minuti

Clausola ORDER BY di SQL con 7 esempi

Conoscete la clausola SQL SQL con la clausola ORDER BY! I nostri esempi pratici e semplici vi aiuteranno a comprenderne la sintassi, gli usi più comuni e le migliori pratiche.

Il linguaggio SQL o Structured Query Language consente di "parlare" con un database. Consente di creare, recuperare e manipolare i dati in un database relazionale. Questo linguaggio è diventato così onnipresente che quasi nessun campo legato ai dati ne è rimasto indenne.

Se siete interessati alla clausola ORDER BY di SQL, presumo che abbiate già iniziato a studiare SQL o che abbiate intenzione di farlo presto. Questa clausola viene utilizzata per ordinare i risultati in un determinato ordine. In questo articolo, tratteremo alcuni esempi pratici per dimostrarne l'uso. Se non avete ancora familiarità con i fondamenti delle query SQL, vi consiglio di seguire il nostro SQL Basics corso.

Vediamo subito la clausola SQL ORDER BY.

Che cos'è la clausola SQL ORDER BY?

Come abbiamo già detto, la clausola SQL ORDER BY viene utilizzata per disporre i risultati di una query in un ordine particolare. Supponiamo di essere un professore universitario e di voler stampare un elenco degli studenti iscritti alla sua classe in ordine alfabetico. Se queste informazioni sono memorizzate in un database, la scrittura di una semplice query fornirà i risultati.

Nella mia esperienza, ORDER BY è uno dei costrutti SQL più utili; quasi tutti i report e le analisi ne fanno uso.

Vi illustro un esempio che spiega come scrivere una semplice query utilizzando ORDER BY.

Esempio 1: ORDER BY con una colonna numerica

Immaginate di lavorare come responsabile delle vendite in un'azienda. Il database dell'azienda memorizza i dati di vendita di ciascun venditore nella seguente tabella, chiamata sales_performance:

sales_person_idnameterritorytotal_sales_valuejoining_date
2333GregorioBavaria1922021-Sep-2021
4323AaronLondon32000010-Jan-2018
1113SebastianLondon3243331-Oct-2020
4134PierreParis2121401-Aug-2020

Supponiamo di voler recuperare questo elenco di venditori. Li si vuole elencare in base al loro numero ID in ordine crescente (cioè dal più piccolo al più grande, dalla A alla Z, ecc.). La query avrà un aspetto simile a questo:

SELECT * 
FROM sales_performance
ORDER BY sales_person_id;

Output:

sales_person_idnameterritorytotal_sales_valuejoining_date
1113SebastianLondon3243331-Oct-2020
2333GregorioBavaria1922021-Sep-2021
4134PierreParis2121401-Aug-2020
4323AaronLondon32000010-Jan-2018

La query funziona restituendo tutti i record e le colonne dalla tabella sales_performance e poi organizza i risultati in base all'ordine numerico della colonna sales_person_id.

È importante notare che ORDER BY ordina in ordine crescente per impostazione predefinita; è possibile utilizzare la parola chiave ASC per indicare che si desidera ottenere i risultati in ordine crescente, ma non è necessario includerla. In un campo con numeri, l'ordine ascendente mette al primo posto il numero più piccolo, seguito dal successivo più piccolo e così via. Il numero più grande viene per ultimo.

Esempio 2: ORDINE PER utilizzando una colonna di testo

È possibile utilizzare la stessa clausola anche per ordinare i valori delle colonne in ordine alfabetico. Ad esempio, supponiamo di voler ordinare un elenco di venditori in base al loro nome. Ecco la query:

SELECT * 
FROM sales_performance
ORDER BY name;

Output:

sales_person_idnameterritorytotal_sales_valuejoining_date
4323AaronLondon32000010-Jan-2018
2333GregorioBavaria1922021-Sep-2021
4134PierreParis2121401-Aug-2020
1113SebastianLondon3243331-Oct-2020

I record sono ora ordinati in ordine alfabetico in base a name. In ordine ascendente, ciò significa che i nomi sono elencati in ordine alfabetico dalla A alla Z.

Esempio 3: ORDINAMENTO PER usando una colonna Data

È possibile ordinare i risultati anche in base a una colonna data, come joining_date. Nel caso della colonna data, la query predefinita restituisce i record dalla data più vecchia a quella più recente:

SELECT * 
FROM sales_performance
ORDER BY joining_date;

Output:

sales_person_idnameterritorytotal_sales_valuejoining_date
4323AaronLondon32000010-Jan-2018
4134PierreParis2121401-Aug-2020
1113SebastianLondon3243331-Oct-2020
2333GregorioBavaria1922021-Sep-2021

Qui i risultati sono ordinati per joining_date, dal più vecchio al più recente.

Esempio 4: Ordinamento in ordine decrescente

Finora tutti i record sono stati ordinati in ordine crescente. Tuttavia, è possibile ordinare i record in ordine decrescente: basta scrivere la parola chiave DESC dopo il nome della colonna.

Ad esempio, si vuole ordinare l'elenco in base al valore totale delle vendite realizzate da ciascun venditore. Si vuole vedere prima il numero più grande (cioè le vendite più alte), quindi si deve ordinare in ordine decrescente. Proviamo la seguente query:

SELECT * 
FROM sales_performance
ORDER BY total_sales_value DESC;

Output:

sales_person_idnameterritorytotal_sales_valuejoining_date
4323AaronLondon32000010-Jan-2018
1113SebastianLondon3243331-Oct-2020
4134PierreParis2121401-Aug-2020
2333GregorioBavaria1922021-Sep-2021

I risultati sono ordinati in ordine decrescente (10-1) in base al valore totale delle vendite. È possibile farlo anche con valori di testo o di data; in questo caso, i risultati saranno ordinati dalla Z alla A (testo) o dal più recente al più vecchio (data).

Le parole chiave DESC o ASC possono essere utilizzate a seconda delle necessità. Se si omette la parola chiave, i risultati saranno in ordine crescente.

Esempio 5: ORDER BY utilizzando un numero di colonna

È anche possibile fare riferimento a una colonna usando un riferimento numerico basato sull'ordine delle colonne nella tabella. In altre parole, si usa un numero al posto del nome della colonna. Per maggiore chiarezza, si veda l'esempio seguente:

SELECT sales_person_id, name 
FROM sales_performance
ORDER BY 2;

Output:

sales_person_idname
4323Aaron
2333Gregorio
4134Pierre
1113Sebastian

Il nome della colonna è la seconda colonna della nostra tabella. Vogliamo ordinare i valori restituiti dalla query in base al nome del rappresentante, ma invece di scrivere nome dopo ORDER BY, abbiamo scritto 2.

Nota: Questo approccio è consigliato solo per le query interattive. Non è consigliato per la scrittura di script, poiché le query con numeri in ORDER BY sono difficili da gestire.

Esempio 6: Ordinamento di più colonne

Quando si scrivono query reali, raramente i requisiti sono semplici come gli esempi che abbiamo usato; potrebbe essere necessario ordinare i valori in base a più colonne.

La clausola ORDER BY permette di farlo specificando un elenco di colonne; basta separare i nomi delle colonne con delle virgole. È possibile utilizzare le parole chiave ASC o DESC (se si desidera) con ciascuna colonna per ordinarla in ordine crescente o decrescente.

Supponiamo di dover visualizzare i record della tabella in ordine decrescente di territory e poi per nome del venditore. La query avrà un aspetto simile a questo.

SELECT * 
FROM sales_performance
ORDER BY territory DESC, name ASC;

Output:

sales_person_idnameterritorytotal_sales_valuejoining_date
4134PierreParis2121401-Aug-2020
4323AaronLondon32000010-Jan-2018
1113SebastianLondon3243331-Oct-2020
2333GregorioBavaria1922021-Sep-2021

Nell'output si noterà che la colonna territory è disposta in ordine alfabetico inverso (cioè decrescente). Per il territorio di Londra, i record sono mostrati in ordine alfabetico per nome.

Esempio 7: Uso di ORDER BY con le espressioni

È possibile ordinare anche in base a criteri diversi dai nomi delle colonne; SQL consente di utilizzare espressioni per ordinare i valori. Per esempio, si supponga di voler ordinare concatenando territory e name in ordine crescente. Ecco la query:

SELECT *
FROM sales_performance
ORDER BY CONCAT(territory, name);

Output:

sales_person_idnameterritorytotal_sales_valuejoining_date
2333GregorioBavaria1922021-Sep-2021
4323AaronLondon32000010-Jan-2018
1113SebastianLondon3243331-Oct-2020
4134PierreParis2121401-Aug-2020

Qui i record sono ordinati dalla concatenazione di territory e name. Quindi Bavaria e Gregorio diventano i primi in ordine alfabetico e Paris Pierre è l'ultimo.

È possibile utilizzare CASE in ORDER BY per ottenere ordinamenti molto precisi.

Volete fare pratica con l'uso di ORDER BY in SQL?

Spero che questi esempi abbiano dimostrato chiaramente l'uso della clausola ORDER BY. L'ordinamento dei dati è un'esigenza fondamentale nella maggior parte delle visualizzazioni e dei report, per cui è importante padroneggiare l'uso di ORDER BY. E la chiave per diventare bravi a scrivere le query è la pratica!

Più query si scrivono per casi d'uso diversi, più la scrittura delle query diventa intuitiva. Se siete alla ricerca di esercizi pratici sul linguaggio SQL, date un'occhiata al nostro sito interattivo SQL Practice Set. Offre 88 esercizi interattivi che vanno dal più semplice al più avanzato.

Se siete alla ricerca di un'esperienza di apprendimento completa, il nostro percorso SQL from A to Z è quello che fa per voi. Offre 7 corsi interattivi e vi porterà sulla strada delle competenze SQL di livello professionale. Oppure date un'occhiata a questo articolo sui vari modi di imparare SQL.

Auguri e buon apprendimento!