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

Cosa fa ORDER BY?

Quando si analizzano i dati, spesso è utile ordinare le righe in un modo specifico. In questo articolo, con diversi esempi, mostrerò come SQL ORDER BY ordina i dati in base a una o più colonne in ordine crescente o decrescente.

Introduzione a ORDER BY

Per impostazione predefinita, l'ordine delle righe nell'output di una query SQL è arbitrario. Se si desidera ordinare l'output in un ordine particolare, è necessario utilizzare la parola chiave ORDER BY. Le righe vengono ordinate in base a una o più colonne specificate nella clausola ORDER BY. A meno che non si dica diversamente, ORDER BY ordina i dati in ordine crescente.

Vediamo un esempio per capire la sintassi di ORDER BY. Abbiamo la seguente tabella con informazioni di base su diversi film famosi.

movies
id title director production_year
1 Psycho Alfred Hitchcock 1960
2 Midnight in Paris Woody Allen 2011
3 Sweet and Lowdown Woody Allen 1993
4 Talk to Her Pedro Almodóvar 2002
5 The Skin I Live in Pedro Almodóvar 2011

Il nostro primo compito è ordinare queste righe in base all'anno di produzione, partendo dal film più recente. Con i dati numerici, l'ordine ascendente implica l'ordinamento dal numero più piccolo al più grande, mentre l'ordine discendente implica l'ordinamento dal numero più grande al più piccolo. Poiché vogliamo che il film più recente sia il primo, dobbiamo ordinare il risultato in ordine crescente. Questo è l'ordine predefinito quando si usa ORDER BY, ma si può anche specificare l'ordine usando la parola chiave ASC.

Come funziona l'SQL ORDE BY?

Ecco come SQL ORDER BY ordina la tabella movie per anno di produzione, in ordine crescente:

Per ordinare l'output con ORDER BY, è sufficiente:

  • Inserire la parola chiave ORDER BY alla fine della query.
  • Seguirla con il nome della colonna che si desidera utilizzare per l'ordinamento.
  • Specificare la parola chiave ASC o DESC per l'ordine ascendente o discendente, rispettivamente. Si tratta di un'opzione.

Nell'esempio precedente, abbiamo ordinato i risultati in base all'anno di produzione, partendo dal film più recente. È possibile scrivere una query SQL per ordinare i risultati in base all'anno di produzione, partendo dal film più recente?

Mostrerò la risposta più avanti, ma ora potete fare una prova e scrivere una query SQL per ottenere il seguente risultato:

idtitledirectorproduction_year
2Midnight in ParisWoody Allen2011
5The Skin I Live inPedro Almodóvar2011
4Talk to HerPedro Almodóvar2002
3Sweet and LowdownWoody Allen1993
1PsychoAlfred Hitchcock1960

Ecco la query:

SELECT *
FROM movies
ORDER BY production_year DESC;

Abbiamo semplicemente sostituito la parola chiave ASC con la parola chiave DESC per cambiare l'ordine da crescente a decrescente. Piuttosto semplice, no?

Per fare esperienza pratica con ORDER BY, consultate il nostro corso interattivo SQL per principianti interattivo.

Vediamo ora altri esempi di utilizzo di ORDER BY in diversi scenari.

ORDINE PER con dati di testo

Ordiniamo la tabella movies in base al titolo del film in ordine alfabetico inverso. Con i dati di testo, l'ordine ascendente implica l'ordinamento in ordine alfabetico (A-Z) e l'ordine discendente implica l'ordinamento in ordine alfabetico inverso (Z-A). Pertanto, la nostra query SQL sarà la seguente:

SELECT *
FROM movies
ORDER BY title DESC;
idtitledirectorproduction_year
2Midnight in ParisWoody Allen2011
5The Skin I Live inPedro Almodóvar2011
4Talk to HerPedro Almodóvar2002
3Sweet and LowdownWoody Allen1993
1PsychoAlfred Hitchcock1960

Nel nostro esempio non abbiamo valori NULL, ma potete imparare come funziona ORDER BY con i NULL in questo articolo.

ORDINARE PER COLONNE MULTIPLE

Spesso è necessario ordinare l'output di una query in base a più colonne. Questo ha senso quando la prima colonna ha più righe con gli stessi valori. Vediamo come funziona.

Nel prossimo esempio, vogliamo ordinare i film (1) in base al nome del regista (in ordine alfabetico) e (2) in base all'anno di produzione (partendo dal film più recente). Considerando come ORDER BY lavora con i dati numerici e testuali, ordineremo l'insieme dei risultati in base alla colonna director in ordine crescente e poi in base a production_year in ordine decrescente:

SELECT *
FROM movies
ORDER BY director ASC, production_year DESC;
idtitledirectorproduction_year
1PsychoAlfred Hitchcock1960
5The Skin I Live inPedro Almodóvar2011
4Talk to HerPedro Almodóvar2002
2Midnight in ParisWoody Allen2011
3Sweet and LowdownWoody Allen1993

Come previsto, l'insieme dei risultati inizia con un film di Alfred Hitchcock, il cui nome è il primo in ordine alfabetico. Poi ci sono due film di Pedro Almodóvar, il cui nome è il secondo in ordine alfabetico. I film di Pedro Almodóvar sono poi ordinati in base all'anno di produzione, con il film del 2011 al primo posto e quello del 2002 al secondo. La tabella si conclude con i film di Woody Allen, anch'essi ordinati dal più recente al più recente. Questo è l'ordine che stavamo cercando.

ORDER BY nelle query SQL complesse

Quando si dispone di una query SQL con più clausole che uniscono, raggruppano e filtrano i dati, è importante inserire la clausola ORDER BY alla fine della query.

Per esempio, supponiamo di voler ottenere i nomi dei registi cinematografici con più di un film e di volerli ordinare in ordine alfabetico. Ecco la query da utilizzare:

SELECT director, count(title) AS number_of_movies
FROM movies
GROUP BY director
HAVING count(title) > 1
ORDER BY director;

In questa query, prima raggruppiamo i dati, poi filtriamo i gruppi in base alla nostra condizione (> 1 film) e infine ordiniamo il set di risultati in base alla colonna director (in ordine crescente, per impostazione predefinita).

Ecco il risultato che stavamo cercando:

directornumber_of_movies
Pedro Almodóvar2
Woody Allen2

Conclusione dell'SQL ORDER BY

Le seguenti regole riassumono i concetti chiave per l'utilizzo di ORDER BY:

  • ORDER BY è sempre posto alla fine della query. Clausole come FROM, WHERE, GROUP BY, HAVING, ecc. devono essere inserite prima della parola chiave ORDER BY.
  • Per ordinare il risultato in ordine crescente, si può inserire la parola chiave ASC dopo il nome della colonna. Tuttavia, questo è facoltativo, poiché l'ordinamento predefinito è ascendente.
  • Per ordinare l'output in ordine decrescente, inserire la parola chiave DESC dopo il nome della colonna.
  • Per ordinare l'output in base a più colonne, è sufficiente specificare i nomi delle colonne nel campo ORDER BY L'insieme dei risultati sarà ordinato in base alla prima colonna; se ci sono più righe con lo stesso valore nella prima colonna, le righe saranno ordinate in base alla seconda colonna e così via.
  • Per l'ordinamento in base a più colonne, è possibile inserire le parole chiaveASC e DESC dopo ogni nome di colonna. In altre parole, è possibile ordinare alcune colonne in ordine crescente e altre in ordine decrescente all'interno della stessa query.

Queste sono le regole di base per l'uso della clausola ORDER BY. Per conoscere usi più avanzati, come l'inserimento di espressioni in ORDER BY, consultate questa guida completa.

È ora di fare pratica con l'SQL ORDER BY!

Avete imparato come funziona l'SQL ORDER BY; ora è il momento di mettere in pratica le vostre nuove conoscenze. Vi consiglio di iniziare con il corso LearnSQL.it SQL per principianti che copre tutti i concetti fondamentali di SQL e include una serie di esercizi interattivi sull'ordinamento delle righe con ORDER BY.

Per ulteriori esercizi, consultate il nostro Esercizi SQL. Questo corso mette alla prova le conoscenze di base di SQL con esercizi multipli sull'aggregazione dei dati, il raggruppamento, il filtraggio e, naturalmente, l'ordinamento.

Imparare l'SQL non dovrebbe essere difficile. Imparate divertendovi!