Ordinare i Dati Recuperati in MySQL


Ordinare dati MySQL

Come abbiamo detto nel precedente articolo di MySQL, l’espressione SQL seguente recupera una singola colonna da una tabella contenuta in un database.

Si può osservare che i valori in Output non hanno nessun ordine particolare:

SELECT prod_nome
FROM prodotti;

Output

prod_nome
olio
carote
pasta integrale
passata di pomodoro
prosciutto crudo
prosciutto cotto

In realtà i dati recuperati non sono visualizzati in semplice ordine casuale.
Solitamente, se non ordinati esplicitamente, i dati sono visualizzati nell’ ordine in cui si trovano le tabelle, che può corrispondere all’ordine in cui i dati sono stati inseriti inizialmente nella tabella.

Tuttavia, se successivamente sono stati aggiornati o eliminati alcuni dati, l’ordine viene modificato dal modo in cui MySQL alloca lo spazio di archiviazione che si può liberare.
Ne risulta quindi che è impossibile (e non consigliato) affidarsi all’ordine dei dati recuperati, se non controllato in modo esplicito.

Secondo la teoria dello sviluppo dei database relazionali, se non è stata specificatamente indicata, la sequenza dei dati recuperati non ha alcuna rilevanza; per ordinare specificatamente i dati richiesti con un’espressione SELECT bisogna utilizzare la clausola ORDER BY.
ORDER BY accetta il nome di una o più colonne da utilizzare per ordinare i dati recuperati:

SELECT prod_nome
FROM prodotti
ORDER BY prod_nome;

Questa espressione è identica a quella precedente, con l’eccezione della specifica della clausola ORDER BY che richiede a MySQL di ordinare alfabeticamente i dati secondo la colonna prod_name.

Output

prod_nome
carote
olio
passata di pomodoro
pasta integrale
prosciutto cotto
prosciutto crudo

Ordinare dati recuperati MySQL secondo più colonne

Spesso si rileva necessario ordinare i dati secondo più colonne, per esempio, se si visualizza un elenco di impiegati, si può desiderare che siano ordinati secondo cognome e nome (prima il cognome quindi, tra gli impiegati con lo stesso cognome, il nome).
Questa operazione si dimostra molto utile nel caso siano presenti impiegati con lo stesso cognome.
Per ordinare i dati secondo più colonne, è sufficiente specificare i nomi delle colonne che si vogliono utilizzare separate da una virgola (allo stesso modo in cui si selezionano più colonne).

Nella query di esempio seguente recupereremo tre colonne ed ordineremo i risultati secondo due di esse: prima il prezzo, poi il nome.

SELECT prod_id,prod_prezzo,prod_nome
FROM prodotti
ORDER BY prod_prezzo,prod_nome;

Output

prod_id prod_prezzo prod_nome
CA 2.5 carote
PM 4 passata di pomodoro
OL1 4.29 olio
PSI 5.11 pasta integrale
PC 6.1 prosciutto cotto
PCR 6.1 prosciutto crudo

La cosa importante da capire quando quando si ordina secondo più colonne, che la priorità di ordine è esattamente quella specificata.
Infatti i prodotti sono stati ordinati secondo la colonna prod_nome solo quando più righe hanno lo stesso valore di prod_prezzo.
Se tutti i valori di prod_prezzo sono univoci (diversi) allora nessun dato viene ordinato secondo la colonna prod_nome .

Specificare la direzione dell’ordinamento

Il tipo di ordinamento dei dati non è limitato al solo ordine ascendente (dalla A alla Z), ma la clausola ORDER BY può anche essere utilizzata per un ordinamento decrescente (dalla Z alla A); per richiedere un ordinamento decrescente è necessario specificarlo con la parola chiave DESC .

SELECT prod_id,prod_prezzo,prod_nome
FROM prodotti
ORDER BY prod_prezzo DESC;

É possibile anche utilizzare l’ordinamento decrescente secondo più colonne, l’esempio seguente mostra un ordinamento discendente dei prodotti (prima i più costosi), oltre ad un ordinamento secondo il nome del prodotto:

SELECT prod_id,prod_prezzo,prod_nome
FROM prodotti
ORDER BY prod_prezzo DESC,prod_nome;

Come vediamo la parola chiave DESC viene applicata solamente alla colonna immediatamente precedente alla parola chiave; infatti nell’esempio DESC è stata specificata per la colonna prod_prezzo, ma non per la colonna prod_nome.
E di conseguenza, la colonna prod_prezzo ha un ordinamento decrescente, mentre la colonna prod_nome (quando il prezzo è uguale) ha ancora un ordinamento ascendente (questo anche perché l’ordinamento acendente è l’ordinamento predefinito).

Ordinamento decrescente su più colonne

Se si vuole effettuare un ordinamento discendente secondo più colonne, ogni colonna deve avere la propria parola chiave DESC.

Uso combinato di ORDER BY e LIMIT

Utilizzando una combinazione di ORDER BY e LIMIT è possibile individuare il valore più alto e più basso di una colonna.
L’esempio seguente mostra come è possibile trovare il valore dell’elemento più caro:

SELECT prod_prezzo
FROM prodotti
ORDER BY prod_prezzo DESC
LIMIT 1;

prod_prezzo DESC garantisce che le rughe siano recuperate in ordine dal più costoso al meno costoso, e LIMIT 1 chiede a MySQL di recuperare una sola riga.
È importante controllare che la posizione della clausola ORDER BY (quando viene specificata), si trovi dopo la clausola FROM (o WHERE se è presente), inoltre se viene utilizzato anche LIMIT, queste deve necessariamente trovarsi dopo ORDER BY; questo perché l’utilizzo delle clausole in un ordine sbagliato può generare un messaggio di errore.


Lascia un Commento!