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 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