Articles

PostgreSQL ORDER BY

Summario: in questo tutorial, imparerete come ordinare il set di risultati restituito dall’istruzione SELECT utilizzando la clausola ORDER BY di PostgreSQL.

Introduzione alla clausola ORDER BY di PostgreSQL

Quando si interrogano i dati di una tabella, l’istruzione SELECT restituisce le righe in un ordine non specificato. Per ordinare le righe dell’insieme dei risultati, si usa la clausola ORDER BY nell’istruzione SELECT.

La clausola ORDER BY permette di ordinare le righe restituite da una clausola SELECT in ordine crescente o decrescente sulla base di un’espressione di ordinamento.

Di seguito viene illustrata la sintassi della clausola ORDER BY:

SELECTselect_listFROMtable_nameORDER BYsort_expression1 , ...sort_expressionN ;
Code language: SQL (Structured Query Language) (sql)

In questa sintassi:

  • Prima di tutto, specificate un’espressione di ordinamento, che può essere una colonna o un’espressione, che volete ordinare dopo le parole chiave ORDER BY. Se si desidera ordinare il set di risultati in base a più colonne o espressioni, è necessario inserire una virgola (,) tra due colonne o espressioni per separarle.
  • In secondo luogo, si utilizza l’opzione ASC per ordinare le righe in ordine crescente e l’opzione DESC per ordinare le righe in ordine decrescente. Se si omette l’opzione ASC o DESC, il ORDER BY usa ASC per default.

PostgreSQL valuta le clausole nello statuto SELECT nel seguente ordine: FROMSELECT, e ORDER BY:

A causa dell’ordine di valutazione, se avete un alias di colonna nella clausola SELECT, potete usarlo nella clausola ORDER BY.

Facciamo alcuni esempi di utilizzo della clausola PostgreSQL ORDER BY.

Esempi di ORDER BY PostgreSQL

Utilizzeremo la tabella customer nel database di esempio per la dimostrazione.

tabella clienti

1) Utilizzo della clausola ORDER BY di PostgreSQL per ordinare righe per una colonna

La seguente query usa la clausola ORDER BY per ordinare i clienti per nome in ordine crescente:

SELECTfirst_name,last_nameFROMcustomerORDER BYfirst_name ASC;
Code language: SQL (Structured Query Language) (sql)
PostgreSQL ORDER BY one column example

Siccome l’opzione ASC è quella predefinita, puoi ometterla nella clausola ORDER BY come questa:

SELECTfirst_name,last_nameFROMcustomerORDER BYfirst_name;
Code language: SQL (Structured Query Language) (sql)

2) Usare la clausola ORDER BY di PostgreSQL per ordinare le righe secondo una colonna in ordine decrescente

La seguente istruzione seleziona il nome e il cognome dalla tabella customer e ordina le righe secondo i valori della colonna cognome in ordine decrescente:

SELECT first_name, last_nameFROM customerORDER BY last_name DESC;
Code language: SQL (Structured Query Language) (sql)
esempio PostgreSQL ORDER BY una colonna DESC

3) Utilizzare la clausola PostgreSQL ORDER BY per ordinare per ordinare le righe in base a più colonne

L’istruzione seguente seleziona il nome e il cognome dalla tabella clienti e ordina le righe per il nome in ordine crescente e il cognome in ordine decrescente:

SELECTfirst_name,last_nameFROMcustomerORDER BYfirst_name ASC,last_name DESC;
Code language: SQL (Structured Query Language) (sql)
PostgreSQL ORDER BY colonne multiple

In questo esempio, la clausola ORDER BY ordina prima le righe per i valori della colonna first name. E poi ordina le righe ordinate in base ai valori della colonna cognome.

Come potete vedere chiaramente dall’output, due clienti con lo stesso nome Kelly hanno il cognome ordinato in ordine decrescente.

4) Usare la clausola ORDER BY di PostgreSQL per ordinare le righe per espressioni

La funzione LENGTH() accetta una stringa e restituisce la lunghezza di tale stringa.

La seguente dichiarazione seleziona i nomi e le loro lunghezze. Ordina le righe in base alla lunghezza dei nomi:

SELECT first_name,LENGTH(first_name) lenFROMcustomerORDER BY len DESC;
Code language: SQL (Structured Query Language) (sql)
PostgreSQL ORDER BY expressions

Perché la clausola ORDER BY viene valutata dopo la clausola SELECT, l’alias di colonna len è disponibile e può essere usato nella clausola ORDER BY.

Clausola ORDER BY di PostgreSQL e NULL

Nel mondo dei database, NULL è un marcatore che indica i dati mancanti o i dati sono sconosciuti al momento della registrazione.

Quando si ordinano le righe che contengono NULL, è possibile specificare l’ordine di NULL con altri valori non nulli utilizzando l’opzione NULLS FIRST o NULLS LAST della clausola ORDER BY:

ORDER BY sort_expresssion
Code language: CSS (css)

L’opzione NULLS FIRST pone NULL prima di altri valori nonnull e l’opzione NULL LAST pone NULL dopo altri valori non null.

Creiamo una tabella per la dimostrazione.

-- create a new tableCREATE TABLE sort_demo(num INT);-- insert some dataINSERT INTO sort_demo(num)VALUES(1),(2),(3),(null);
Code language: SQL (Structured Query Language) (sql)

Nota che non è necessario capire le dichiarazioni CREATE TABLE e INSERT. Basta eseguirle da pgAdmin o psql per creare la tabella sort_demo e inserirvi i dati.

La seguente query restituisce i dati dalla tabella sort_demo:

SELECT numFROM sort_demoORDER BY num;
Code language: SQL (Structured Query Language) (sql)

In questo esempio, la clausola ORDER BY ordina i valori nella colonna num della tabella sort_demo in ordine crescente. Mette NULL dopo gli altri valori.

Quindi se si usa l’opzione ASC, la clausola ORDER BY usa l’opzione NULLS LAST per default. Pertanto, la seguente query restituisce lo stesso risultato:

SELECT numFROM sort_demoORDER BY num NULLS LAST;
Code language: SQL (Structured Query Language) (sql)

Per mettere NULL prima di altri valori non nulli, si usa l’opzione NULLS FIRST:

SELECT numFROM sort_demoORDER BY num NULLS FIRST;
Code language: SQL (Structured Query Language) (sql)

La seguente ordina i valori nella colonna num della tabella sort_demo in ordine decrescente:

SELECT numFROM sort_demoORDER BY num DESC;
Code language: SQL (Structured Query Language) (sql)

Come potete vedere chiaramente dall’output, la clausola ORDER BY con l’opzione DESC usa il NULLS FIRST per default.

Per invertire l’ordine, puoi usare l’opzione NULLS LAST:

SELECT numFROM sort_demoORDER BY num DESC NULLS LAST;
Code language: SQL (Structured Query Language) (sql)

Sommario

  • Usa la clausola ORDER BY nella dichiarazione SELECT per ordinare le righe.
  • Utilizzare l’opzione ASC per ordinare le righe in ordine crescente e l’opzione DESC per ordinare le righe in ordine decrescente. La clausola ORDER BY usa l’opzione ASC per default.
  • Utilizza le opzioni NULLS FIRST e NULLS LAST per specificare esplicitamente l’ordine di NULL con altri valori non nulli.
  • Questo tutorial è stato utile?
  • SìNo

Lascia un commento

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