MySQL ORDER BY

Sommario: in questo tutorial, imparerete come ordinare un set di risultati usando la clausola MySQL ORDER BY.

Introduzione alla clausola MySQL ORDER BY

Quando si usa l’istruzione SELECT per interrogare i dati di una tabella, il set di risultati non è ordinato. Ciò significa che le righe nel set di risultati possono essere in qualsiasi ordine.

Per ordinare il set di risultati, si aggiunge la clausola ORDER BY all’istruzione SELECT. La seguente illustra la sintassi della clausola ORDER BY:

In questa sintassi, si specificano una o più colonne che si desidera ordinare dopo la clausola ORDER BY.

Il ASC sta per ascendente e il DESC sta per discendente. Si usa ASC per ordinare il set di risultati in ordine crescente e DESC per ordinare il set di risultati in ordine decrescente.

Questa clausola ORDER BY ordina l’insieme dei risultati in ordine crescente:

ORDER BY column1 ASC;
Code language: SQL (Structured Query Language) (sql)

E questa clausola ORDER BY ordina l’insieme dei risultati in ordine decrescente:

ORDER BY column1 DESC;
Code language: SQL (Structured Query Language) (sql)

Per default, la clausola ORDER BY usa ASC se non si specifica esplicitamente alcuna opzione.

Quindi, le seguenti clausole sono equivalenti:

ORDER BY column1 ASC;
Code language: SQL (Structured Query Language) (sql)

e

ORDER BY column1;
Code language: SQL (Structured Query Language) (sql)

Se si vuole ordinare l’insieme dei risultati per colonne multiple, si specifica una lista di colonne separate da virgole nella clausola ORDER BY:

ORDER BY column1, column2;
Code language: SQL (Structured Query Language) (sql)

È possibile ordinare il risultato per una colonna in ordine crescente e poi per un’altra colonna in ordine decrescente:

ORDER BY column1 ASC, column2 DESC;
Code language: SQL (Structured Query Language) (sql)

In questo caso, la clausola ORDER BY:

  • Prima, ordina l’insieme dei risultati per i valori nel column1 in ordine crescente.
  • Poi, ordinate l’insieme dei risultati per i valori nel column2 in ordine decrescente. Notate che l’ordine dei valori nel column1 non cambierà in questo passo, solo l’ordine dei valori nel column2 cambia.

Nota che la clausola ORDER BY viene sempre valutata dopo le clausole FROM e SELECT.

MySQL ORDER BY esempi

Utilizzeremo la tabella customers del database di esempio per la dimostrazione.

A) Utilizzo della clausola MySQL ORDER BY per ordinare i valori in una colonna esempio

La seguente query usa la clausola ORDER BY per ordinare i clienti secondo i valori della colonna contactLastName in ordine crescente.

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname;
Code language: SQL (Structured Query Language) (sql)

Prova

Se volete ordinare i clienti per cognome in ordine decrescente, si usa il DESC dopo la colonna contactLastname nella clausola ORDER BY come mostrato nella seguente query:

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC;
Code language: SQL (Structured Query Language) (sql)

Prova

B) Utilizzo della clausola MySQL ORDER BY per ordinare i valori in più colonne esempio

Se si desidera ordinare i clienti per il cognome in ordine decrescente e poi per il primo nome in ordine crescente, si specifica sia DESC che ASC nella colonna corrispondente come segue:

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;
Code language: SQL (Structured Query Language) (sql)

Try It Out

In questo esempio, la clausola ORDER BY ordina prima l’insieme dei risultati per cognome in ordine decrescente e poi ordina l’insieme dei risultati ordinati per nome in ordine crescente per produrre l’insieme dei risultati finale.

C) Usare MySQL ORDER BY per ordinare un insieme di risultati secondo un’espressione

Vedi la seguente tabella orderdetails dal database di esempio.

La seguente query seleziona le righe dell’ordine dalla tabella orderdetails. Calcola il subtotale per ogni riga e ordina il risultato in base al subtotale.

SELECT orderNumber, orderlinenumber, quantityOrdered * priceEachFROM orderdetailsORDER BY quantityOrdered * priceEach DESC;
Code language: SQL (Structured Query Language) (sql)

Prova

Per rendere la query più leggibile, è possibile assegnare all’espressione nella clausola SELECT un alias di colonna e utilizzare tale alias di colonna nella clausola ORDER BY come mostrato nella seguente query:

SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotalFROM orderdetailsORDER BY subtotal DESC;
Code language: SQL (Structured Query Language) (sql)

Try It Out

In questo esempio, abbiamo usato subtotal come alias di colonna per l’espressione quantityOrdered * priceEach e abbiamo ordinato il set di risultati per l’alias subtotal.

L’alias di colonna può essere usato nella clausola ORDER BY perché la clausola SELECT viene valutata prima della clausola ORDER BY. Nel momento in cui la clausola ORDER BY viene valutata, l’alias di colonna è accessibile.

Utilizzare MySQL ORDER BY per ordinare i dati usando una lista personalizzata

La clausola ORDER BY permette di ordinare i dati usando una lista personalizzata utilizzando la funzione FIELD().

Vedi la seguente tabella orders dal database di esempio.

Supponiamo di voler ordinare gli ordini di vendita in base al loro stato nel seguente ordine:

  • In Process
  • On Hold
  • Cancellato
  • Risolto
  • Disputato
  • Spedito

Per fare questo, è possibile utilizzare la funzione FIELD() per mappare ogni stato dell’ordine a un numero e ordinare il risultato in base al risultato della funzione FIELD():

Prova

La seguente espressione:

FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
Code language: SQL (Structured Query Language) (sql)

restituisce l’indice del status nella lista 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped'.

Per esempio, se il statusIn Process, la funzione restituirà 1. Se il statusOn Hold, la funzione restituirà 2, e così via.

In questo tutorial, hai imparato a usare la clausola di MySQL ORDER BY per ordinare le righe nel set di risultati in base a una o più colonne in ordine crescente o decrescente.

  • Questo tutorial è stato utile?
  • SìNo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *