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
:
Code language: SQL (Structured Query Language) (sql)SELECTselect_listFROMtable_nameORDER BYsort_expression1 , ...sort_expressionN ;
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’opzioneDESC
per ordinare le righe in ordine decrescente. Se si omette l’opzioneASC
oDESC
, ilORDER BY
usaASC
per default.
PostgreSQL valuta le clausole nello statuto SELECT
nel seguente ordine: FROM
SELECT
, 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.
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:
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerORDER BYfirst_name ASC;
Siccome l’opzione ASC
è quella predefinita, puoi ometterla nella clausola ORDER BY
come questa:
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerORDER BYfirst_name;
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:
Code language: SQL (Structured Query Language) (sql)SELECT first_name, last_nameFROM customerORDER BY last_name 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:
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerORDER BYfirst_name ASC,last_name DESC;
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:
Code language: SQL (Structured Query Language) (sql)SELECT first_name,LENGTH(first_name) lenFROMcustomerORDER BY len DESC;
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
:
Code language: CSS (css)ORDER BY sort_expresssion
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.
Code language: SQL (Structured Query Language) (sql)-- create a new tableCREATE TABLE sort_demo(num INT);-- insert some dataINSERT INTO sort_demo(num)VALUES(1),(2),(3),(null);
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
:
Code language: SQL (Structured Query Language) (sql)SELECT numFROM sort_demoORDER BY num;
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:
Code language: SQL (Structured Query Language) (sql)SELECT numFROM sort_demoORDER BY num NULLS LAST;
Per mettere NULL
prima di altri valori non nulli, si usa l’opzione NULLS FIRST
:
Code language: SQL (Structured Query Language) (sql)SELECT numFROM sort_demoORDER BY num NULLS FIRST;
La seguente ordina i valori nella colonna num
della tabella sort_demo
in ordine decrescente:
Code language: SQL (Structured Query Language) (sql)SELECT numFROM sort_demoORDER BY num DESC;
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
:
Code language: SQL (Structured Query Language) (sql)SELECT numFROM sort_demoORDER BY num DESC NULLS LAST;
Sommario
- Usa la clausola
ORDER BY
nella dichiarazioneSELECT
per ordinare le righe. - Utilizzare l’opzione
ASC
per ordinare le righe in ordine crescente e l’opzioneDESC
per ordinare le righe in ordine decrescente. La clausolaORDER BY
usa l’opzioneASC
per default. - Utilizza le opzioni
NULLS FIRST
eNULLS LAST
per specificare esplicitamente l’ordine diNULL
con altri valori non nulli.
- Questo tutorial è stato utile?
- SìNo