9th Dec 2022 Tempo di lettura: 6 minuti Come ordinare i record con la clausola ORDER BY Dorota Wdzięczna ORDER BY ordinare le voci Indice Sintassi ORDER BY Uso di ORDER BY con una colonna Utilizzo di ORDER BY con più colonne Espressioni nella clausola ORDER BY Utilizzo di ORDER BY con CASE Ordinare in base all'espressione CASE Ordinamento con CASE e una colonna I database relazionali non memorizzano i record in ordine alfabetico, numerico, ascendente o in un ordine particolare. L'unico modo per ordinare i record nell'insieme dei risultati è utilizzare la clausola ORDER BY. Questa clausola può essere utilizzata per ordinare le righe in base a una colonna, a un elenco di colonne o a un'espressione. È anche possibile ordinare le righe utilizzando l'espressione CASE. In questo post esamineremo la clausola ORDER BY: come scriverla, come funziona e cosa fa. Sintassi ORDER BY La clausola ORDER BY viene utilizzata per ordinare le righe in una tabella di risultati. Ecco la sua sintassi: SELECT list_column FROM table ORDER BY column ; Uso di ORDER BY con una colonna L'esempio seguente mostra i record della tabella furniture_data che sono stati ordinati in ordine crescente in base alla colonna furniture. L'ordine ascendente è quello predefinito in una clausola ORDER BY. SELECT id, furniture, points FROM furniture_data ORDER BY furniture ; Come si può notare, la clausola ORDER BY è posta dopo l'istruzione FROM. Dopo la parola chiave ORDER BY, si trova la colonna o le colonne in base alle quali verranno ordinate le righe. In altre parole, si sta dicendo al database "Prendete le colonne id, furniture e points dalla tabella e mettetele in ordine in base al numero di righe. furniture_data e di metterle in ordine in base alla colonna mobili". È possibile specificare l'ordinamento dei risultati, in ordine crescente (A-Z) o decrescente (Z-A). Per l'ordine ascendente, è possibile utilizzare la parola chiave ASC, ma non è necessario. Per l'ordine discendente, è necessario utilizzare la parola chiave DESC. Quindi, dopo il nome della colonna, si può inserire la parola chiave ASC o DESC. L'esempio seguente ordina i dati in ordine crescente in base alla colonna "furniture": SELECT id, furniture, points FROM furniture _data ORDER BY furniture ASC ; Ricordate che non è necessaria la parola chiave ASC per specificare un ordinamento ascendente; SQL lo fa per default. Come funziona la clausola GROUP BY di SQL quando sono coinvolti valori #NULL? Scopritelo! https://t.co/yaTfYvwVix pic.twitter.com/ELx0AiLnnN - Vertabelo (@Vertabelo) 29 aprile 2017 Successivamente, si osservino i dati della tabella furniture_data che utilizzeremo negli altri esempi di questo articolo: id furniture points price 1 chair 5 120 2 sofa 8 950 3 table 2 1350 4 bookcase 5 200 5 bed 3 2000 Ecco come appare dopo un ordinamento ascendente per la colonna furniture: id furniture points 5 bed 3 4 bookcase 5 1 chair 5 2 sofa 8 3 table 2 E se facessimo un ordinamento discendente sulla stessa colonna? SELECT id, furniture, points FROM furniture _data ORDER BY furniture DESC ; Ecco il risultato dell'ordinamento discendente: id furniture points 3 table 2 2 sofa 8 1 chair 5 4 bookcase 5 5 bed 3 Utilizzo di ORDER BY con più colonne Gli ultimi esempi hanno ordinato i dati utilizzando una sola colonna. Tuttavia, se alcuni record di questa colonna hanno valori identici, ciò potrebbe influenzare la visualizzazione dei risultati. In questo caso, è necessario ordinare le righe utilizzando un'altra colonna. L'esempio successivo mostra come utilizzare più di una colonna per ordinare i dati: SELECT id, furniture, points FROM furniture _data ORDER BY point DESC , furniture; Questo esempio ordina le righe in ordine decrescente in base alla colonna points. Se due o più record hanno lo stesso valore, il database utilizza la colonna furniture per ordinare i record in ordine crescente. Ecco i risultati: id furniture points 2 sofa 8 4 bookcase 5 1 chair 5 5 bed 3 3 table 2 Le righe della libreria e della sedia hanno lo stesso numero di punti (5), quindi anche queste righe vengono ordinate in base ai valori della colonna furniture. L'ordinamento è alfabetico, quindi la riga viola viene mostrata prima di quella libreria viene visualizzata prima della riga sedia riga . Espressioni nella clausola ORDER BY A volte è necessario ordinare i record in base al risultato di un calcolo piuttosto che ai valori delle colonne. Immaginiamo di voler ordinare i dati recuperati dalla tabella furniture_data tabella in base all'importo di uno sconto sul prezzo. Lo sconto verrebbe calcolato moltiplicando il valore della colonna points per 120 e dividendolo poi per 100. Ecco come apparirebbe nel codice SQL: SELECT id, furniture, points, price FROM furniture _data ORDER BY price-120*points/100; Ecco il risultato: id furniture points price 1 chair 5 120 4 bookcase 5 200 2 sofa 8 950 3 table 2 1350 5 bed 3 2000 Utilizzo di ORDER BY con CASE Ordinare in base all'espressione CASE Oltre a ordinare le righe utilizzando una o più colonne, è possibile utilizzare ORDER BY con espressioni CASE semplici e ricercate.(Per saperne di più su CASE, leggete questo articolo). Perché usare CASE in una clausola ORDER BY? È possibile che si voglia ottenere un ordinamento ancora più specifico delle righe, oppure che si vogliano recuperare solo alcune delle righe (ad esempio quelle che soddisfano determinate condizioni). Quando è necessario aggiungere la logica IF-THEN a un'istruzione SELECT, CASE è qui per aiutare -> https://t.co/EMwAZDO2T5 #SQL #SQLServer #SQLTip pic.twitter.com/dPHNp6IsjS - Vertabelo (@Vertabelo) 8 maggio 2017 L'esempio seguente mostra come utilizzare CASE per ordinare i dati in modo specifico. Immaginiamo di voler recuperare i dati dalla tabella furniture_data ma di voler visualizzare in cima ai risultati le righe con un numero pari di punti. Non è possibile farlo usando le colonne come criterio di ordinamento; è necessario CASE. Di seguito è riportato un esempio del codice in questione: SELECT id, furniture, points FROM furniture _data ORDER BY CASE WHEN points%2=0 THEN 1 ELSE 2 END ; Ecco come appaiono i risultati: id furniture points 2 sofa 8 3 table 2 1 chair 5 4 bookcase 5 5 bed 3 Come fa l'espressione CASE a farlo? Verifica se il numero della colonna points può essere diviso per 2 senza resto. In caso affermativo, viene restituito un 1 e riga viene mostrata nella parte superiore dei risultati. In caso contrario, viene restituito un 2 e la riga viene mostrata nella parte inferiore dei risultati. Se si desidera che i record dei mobili con un numero dispari di punti siano elencati per primi, è sufficiente modificare l'ordine di ordinamento in decrescente: SELECT id, furniture, points FROM furniture _data ORDER BY CASE WHEN points%2=0 THEN 1 ELSE 2 END DESC ; Il risultato: id furniture points 1 chair 5 4 bookcase 5 5 bed 3 2 sofa 8 3 table 2 Ordinamento con CASE e una colonna È possibile utilizzare altri elementi insieme all'istruzione CASE, come ad esempio una colonna o un'altra espressione CASE. Guardate il seguente esempio, che utilizza un'espressione CASE e una colonna per ordinare i dati. SELECT id, furniture, points FROM furniture _data ORDER BY CASE WHEN points%2=0 THEN 1 ELSE 2 END , furniture DESC ; Innanzitutto, i record vengono ordinati in base all'espressione CASE, che controlla se i valori points sono pari o dispari. Come prima, i numeri pari sono elencati per primi. Ma vogliamo ordinare ancora di più i gruppi. Utilizziamo quindi la colonna furniture per ordinare i risultati all'interno dell'espressione CASE. Poiché abbiamo usato la parola chiave DESC, le righe sono elencate in ordine alfabetico inverso. Ecco i risultati: id furniture points 3 table 2 2 sofa 8 1 chair 5 4 bookcase 5 5 bed 3 Confrontate questi risultati con quelli sottostanti, che utilizzano solo l'espressione CASE: id furniture points 2 sofa 8 3 table 2 1 chair 5 4 bookcase 5 5 bed 3 Volete saperne di più? Questo articolo vi ha solo permesso di iniziare a conoscere la clausola ORDER BY. Il modo migliore per saperne di più è provarla di persona, utilizzando il corso Query SQL di Vertabelo Academy. Tags: ORDER BY ordinare le voci