back to top

SQL ORDER BY – ASC e DESC per ordinare in modo ascendente o discendente

Nella lezione dedicata all SELECT abbiamo visto come interrogare il database per estrarre i dati in esso contenuti. Abbiamo anche visto come utilizzare la clausola WHERE per filtrare la selezione in base a diversi criteri. In questa lezione della nostra guida SQL vedremo come ordinare i risultati ottenuti attraverso la SELECT.

Al fine di effettuare l’ordinamento di un resultset si utilizza la clausola ORDER BY la quale consente di definire una criterio di ordinamento esplicito.

La sua sintassi è la seguente:

SELECT * FROM nome_tabella ORDER BY criterio

La clausola ORDER BY si posiziona alla fine della query, dopo l’eventuale clausola WHERE:

SELECT * FROM nome_tabella WHERE condizione ORDER BY criterio

Il criterio di oridinamento può corrispondere al nome di una colonna, ad esempio:

SELECT * FROM libri ORDER BY id

Con questa query andremo ad ordinare tutti i libri presenti all’interno dell’omonima colonna in base all’identificativo numerico, dal più piccolo al più grande:

idid_autoretitolodescrizioneprezzodisponibile
11Il Signore degli AnelliFantastico capolavoro di genere epico fantastico29.991
22Manoscritto trovato in una bottigliaBreve racconto del terrore scritto da Edgar Allan Poe e pubblicato per la prima volta il 19 ottobre 1833 sul Baltimore Saturday Visiter19.991
32I delitti della Rue MorgueBreve racconto polizziesco scritto da Edgar Allan Poe e pubblicato nel 1841 sulla rivista The Graham Magazine di Filadelfia15.990
43DraculaIl più celebre romanzo horror nato dalla penna di Bram Stoker21.501

Supponiamo ora di voler ordinare i libri in ordine alfabetico in base al titolo. Per farlo useremo questa query:

SELECT * FROM libri ORDER BY titolo
idid_autoretitolodescrizioneprezzodisponibile
43DraculaIl più celebre romanzo horror nato dalla penna di Bram Stoker21.501
32I delitti della Rue MorgueBreve racconto polizziesco scritto da Edgar Allan Poe e pubblicato nel 1841 sulla rivista The Graham Magazine di Filadelfia15.990
11Il Signore degli AnelliFantastico capolavoro di genere epico fantastico29.991
22Manoscritto trovato in una bottigliaBreve racconto del terrore scritto da Edgar Allan Poe e pubblicato per la prima volta il 19 ottobre 1833 sul Baltimore Saturday Visiter19.991

Nulla vieta di effettuare ordinamenti su più colonne: in questo caso il DBMS ordinerà i dati sulla base della prima colonna da sinistra e qualora due record siano equivalenti per tale colonna verrà utilizzata la seconda colonna per discriminare l’ordine tra i due:

SELECT * FROM libri ORDER BY titolo, descrizione, id

Qualora si indichino più colonne per l’ordinamento queste dovranno essere separate con una virgola. La colonna "più importante" per l’ordinamento dei record, è quella più a sinistra, le altre interverranno solo in via residuale.

Criteri di ordinamento ascendente e discendente

Abbiamo visto che attraverso la clausola ORDER BY è possibile definire il modo in cui i dati debbano essere ordinati in base ad una o più colonne. Per ciascuna colonna specificata nella clausola ORDER BY è possibile stabile se l’ordinamento debba essere ascendente o discendente. Per farlo possiamo usare la parola chiave ASC per ordinare in modo ascendente (dal minore al maggiore) o la parola chiave DESC per ordinare i dati in modo discendente (dal maggiore al minore). Se non viene specificato un criterio di ordinamento verrà applicato di default ASC (come negli esempi precedenti in cui l’ordinamento ascendente era implicito).

L’ordinamento può essere applicato a valori numerici, di tipo stringa o data.

Vediamo una query di esempio:

SELECT * FROM libri ORDER BY titolo ASC

Con questa query andremo ad estrarre tutti i dati della nostra ipotetica libreria ordinando i risultati in base al campo "titolo" in modo ascendente (quindi alfabeticamente da A a Z).

SELECT * FROM libri ORDER BY id DESC

Con questa query andremo ad estrarre i dati ordinando i risultati in base al campo "id" in modo discendente (quindi alfabeticamente dal numero maggiore al minore).

Quando utilizzare ASC

Utilizzeremo ASC (ordinamento ascendente o crescente) quando vogliamo ordinare il dataset in base a:

  • un valore numerico dal più piccolo al più grande: ad esempio può essere usato per ordinare i prodotti di un e-commerce in base al prezzo, da più economico al più costoso;
  • una stringa in modo alfabetico dalla A alla Z: ad esempio può essere usato per mostrare un elenco di nomi di persone o di prodotti, titoli di libri, film, brani musicali, ecc.;
  • un campo data dalla più vecchia alla più recente: ad esempio può essere creare cronologie, per mostrare la successione temporale di eventi dal più vecchio al più recente.

Quando utilizzare DESC

Utilizzeremo DESC (ordinamento discendente o decrescente) quando vogliamo ordinare il dataset in base a:

  • un valore numerico dal più grande al piccolo: ad esempio può essere utilizzto per ordinare una lista di prodotti in base al peso, dal più pesante al più leggero;
  • una stringa in modo alfabetico inverso dalla Z alla A: ad esempio può essere utilizzato per mostrare un eleneco di nomi o titoli in ordine inverso;
  • un campo data dalla più recente alla più vecchia: è l’ordinamento tipico dei blog in cui gli articoli più recenti sono in cima alla lista mentre i più vecchi vanno in fondo.
Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).