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:
id | id_autore | titolo | descrizione | prezzo | disponibile |
---|---|---|---|---|---|
1 | 1 | Il Signore degli Anelli | Fantastico capolavoro di genere epico fantastico | 29.99 | 1 |
2 | 2 | Manoscritto trovato in una bottiglia | Breve racconto del terrore scritto da Edgar Allan Poe e pubblicato per la prima volta il 19 ottobre 1833 sul Baltimore Saturday Visiter | 19.99 | 1 |
3 | 2 | I delitti della Rue Morgue | Breve racconto polizziesco scritto da Edgar Allan Poe e pubblicato nel 1841 sulla rivista The Graham Magazine di Filadelfia | 15.99 | 0 |
4 | 3 | Dracula | Il più celebre romanzo horror nato dalla penna di Bram Stoker | 21.50 | 1 |
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
id | id_autore | titolo | descrizione | prezzo | disponibile |
---|---|---|---|---|---|
4 | 3 | Dracula | Il più celebre romanzo horror nato dalla penna di Bram Stoker | 21.50 | 1 |
3 | 2 | I delitti della Rue Morgue | Breve racconto polizziesco scritto da Edgar Allan Poe e pubblicato nel 1841 sulla rivista The Graham Magazine di Filadelfia | 15.99 | 0 |
1 | 1 | Il Signore degli Anelli | Fantastico capolavoro di genere epico fantastico | 29.99 | 1 |
2 | 2 | Manoscritto trovato in una bottiglia | Breve racconto del terrore scritto da Edgar Allan Poe e pubblicato per la prima volta il 19 ottobre 1833 sul Baltimore Saturday Visiter | 19.99 | 1 |
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.