# SQL ORDER BY: come ordinare correttamente i risultati delle tue query

Con SQL `ORDER BY` è possibile organizzare i risultati di ricerca delle tue query di dati **in ordine crescente o decrescente** in base alle tue esigenze. Ordinando i dati in righe e colonne nella tua tabella di destinazione puoi aumentarne la chiarezza e la leggibilità. In questo modo è possibile ottimizzare e velocizzare le analisi dei dati e le query su record di dati complessi.

## Che cos’è il comando SQL `ORDER BY`?

Se desideri organizzare dati e risultati di record di dati semplici o complessi nella tabella di destinazione, utilizza il comando `ORDER BY` di SQL. Questo comando ti permette di definire un **ordine crescente o decrescente nella query di dati** per i tuoi dati di destinazione. Con `ORDER BY` ottieni quindi maggiore chiarezza e leggibilità ordinando i risultati della query. Come impostazione predefinita, il comando mette i dati della query in ordine crescente, ossia dalla A alla Z o dal valore più piccolo a quello più grande. Se preferisci un ordine diverso, indica la relativa parola chiave opzionale `ASC` (Ascend) per *crescente* o `DESC` (Descend) per *decrescente*.

È possibile definire soltanto una colonna o anche più colonne per i risultati. Grazie alla chiarezza di presentazione, `ORDER BY` svolge un ruolo importante per ottenere **query di dati veloci e ordinate**. Questo comando è utilizzato spesso in combinazione con [SQL SELECT](https://www.ionos.it/digitalguide/server/configurazione/sql-select/), [SQL WHERE](https://www.ionos.it/digitalguide/server/configurazione/sql-where/) e, a seconda dei casi, con altri [operatori SQL](https://www.ionos.it/digitalguide/server/configurazione/operatori-sql/) o funzioni come [SQL GROUP BY](https://www.ionos.it/digitalguide/server/configurazione/sql-group-by/).

Consiglio Vorresti saperne di più su [SQL](https://www.ionos.it/digitalguide/server/know-how/che-cose-sql/), ma le tue conoscenze non bastano? La nostra [introduzione a SQL mediante esempi](https://www.ionos.it/digitalguide/server/configurazione/introduzione-a-sql-mediante-esempi/) ti aiuterà a entrare nel mondo di questo popolare linguaggio per database.

## La sintassi di SQL `ORDER BY`

La sintassi di `ORDER BY` si presenta così:

```sql
SELECT  colonnaA, colonnaB, …  oppure *
FROM  Tabella
ORDER BY  colonnaA, colonnaB, …  (opzionale: ASC oppure DESC)
```

N.B. Se indichi una sola colonna dopo `ORDER BY`, come risultato ottieni **una colonna con i risultati messi in ordine**. Se indichi più colonne, la clausola ordina prima tutti i risultati in base alla colonna A. In presenza di voci identiche in righe diverse, la clausola ordina le voci in base alla colonna B.

È possibile espandere la sintassi di SQL `ORDER BY` con gli operatori o i parametri desiderati. Con una clausola `WHERE` puoi definire ad esempio ulteriori condizioni per specificare meglio i risultati della query. La sintassi in combinazione con `WHERE` si presenta così:

```sql
SELECT  colonnaA, colonnaB, …  oppure *
FROM  Tabella
WHERE  colonnaA  =  'Condizione di ricerca'
ORDER BY  colonnaA, colonnaB, …  (opzionale: ASC oppure DESC)
```

È possibile utilizzare i seguenti parametri:

- `SELECT`: con SQL SELECT puoi definire i dati da analizzare. Se inserisci un asterisco `*`, la query vale per l’intero record di dati; se invece inserisci i nomi delle colonne, la ricerca riguarda le colonne selezionate.
- `FROM`: definisce la tabella in cui eseguire la query dei dati.
- `WHERE`: la clausola opzionale [SQL WHERE](https://www.ionos.it/digitalguide/server/configurazione/sql-where/) definisce una condizione di ricerca specifica in base alla quale vengono ordinati i risultati. Qui è possibile utilizzare ulteriori operatori di confronto come `=` oppure operatori come [SQL LIKE](https://www.ionos.it/digitalguide/server/configurazione/sql-like/) o [SQL NOT](https://www.ionos.it/digitalguide/server/configurazione/sql-not/).
- `ORDER BY`: definisce il valore in base al quale ordinare i risultati. Se non indichi né `ASC` né `DESC`, il comando mette automaticamente i risultati in ordine alfabetico o numerico decrescente.

N.B. La clausola `ORDER BY` ordina i valori NULL automaticamente o in base all’ordine scelto, a seconda del database. In SQLite, MySQL e SQL Server, il comando gestisce i valori NULL come valori più bassi: in ordine crescente si trovano quindi all’inizio. In Oracle e PostgreSQL, i valori NULL sono considerati come valori più alti: in ordine crescente sono quindi alla fine.

## Possibilità di applicazione di `ORDER BY`

Alcune applicazioni pratiche di SQL ORDER BY sono:

- Ordinamento di informazioni sui prodotti in base al nome del prodotto, alla categoria o al prezzo
- Ordinamento di transazioni per importo, data o nominativo
- Organizzazione di ordini per quantità o valutazioni
- Ordinamento di dipendenti per stipendio, incarichi prestazioni o reparto
- Elenco delle scorte a magazzino per quantità o nome
- Ordinamento di consegne per codice postale o numero di tracking
- Ordinamento di elenchi dei clienti per regione o età

## Esempi pratici per SQL `ORDER BY`

Nelle parti seguenti ti mostriamo tre pratici esempi di applicazione per comprendere meglio il funzionamento di `ORDER BY`.

### Ordinamento di prodotti in base al prezzo

Se desideri disporre i prodotti della categoria “Bellezza” di una tabella “Prodotti” in base al prezzo in ordine crescente, utilizza FROM per indicare la categoria da usare per l’ordinamento. Con `ORDER BY` e `ASC` puoi stabilire che l’ordinamento segua il “Prezzo” in ordine crescente. Procedi come segue:

```sql
SELECT  *
FROM  Prodotti
WHERE  categoria  = 'Bellezza'
ORDER BY  Prezzo  ASC;
```

### Filtraggio di gruppi di clienti

Supponiamo che in una tabella “Clienti” desideri mettere i nomi di tutti i clienti in Italia in ordine alfabetico applicando la condizione di ordinamento “Paese”. Per metterli in ordine crescente dalla A alla Z, non è necessario aggiungere la clausola `ASC`. Se invece desideri metterli in ordine dalla Z alla A, aggiungi `DESC` al comando SQL `ORDER BY`:

```sql
SELECT  *
FROM  Clienti
WHERE  Paese = 'Italia'
ORDER BY  Nome  DESC;
```

### Ordinamento con più condizioni

Nell’esempio seguente, in una tabella “Prodotti” desideri mettere le voci della categoria “Elettronica” in ordine alfabetico crescente. Se la quantità ordinata è identica, allora organizzerai gli ordini per regione. La sintassi si presenta così:

```sql
SELECT  *
FROM  Prodotti
WHERE  Categoria  =  'Elettronica'
ORDER BY  Quantità ASC, Regione  DESC;
```

## Alternative a SQL `ORDER BY`

Un’alternativa che svolga la stessa funzione di `ORDER BY` non esiste. Tuttavia, tra i [comandi SQL](https://www.ionos.it/digitalguide/server/configurazione/comandi-sql/) che sono utilizzati spesso in combinazione con SQL `ORDER BY` troviamo anche SQL GROUP BY. Mentre `GROUP BY` permette ad esempio di **raggruppare per categoria** i record di dati presenti in colonne, `ORDER BY` ti consente anche di ordinarli.

**Esempio**: vorresti raggruppare i valori degli ordini dei clienti per Paese e, successivamente, metterli in ordine crescente in base alla quantità media ordinata con la funzioni di aggregazione [SQL AVG](https://www.ionos.it/digitalguide/server/configurazione/sql-avg/). La sintassi si presenta così:

```sql
SELECT  Paese, AVG(Quantità)
FROM  Clienti
WHERE  Categoria = 'Elettronica'
GROUP BY  Paese
ORDER BY  AVG(Quantità) ASC;
```

Con la clausola [SQL HAVING](https://www.ionos.it/digitalguide/server/configurazione/sql-having/) puoi filtrare ulteriormente i record di dati ordinati in base a condizioni e criteri di ricerca definiti. Inoltre, con `LIMIT` è possibile limitare l’insieme risultato a una quantità desiderata.


This is a markdown version of: [https://www.ionos.it/digitalguide/server/configurazione/sql-order-by/](https://www.ionos.it/digitalguide/server/configurazione/sql-order-by/) for AI/LLM consumption.