Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Query > Classificazione di righe
PrecedenteQuery di combinazioneLIMIT e OFFSETSuccessivo

7.5. Classificazione di righe

Dopo che una query ha prodotto una tabella di output (dopo che l'elenco di selezione è stato elaborato) può eventualmente essere classificata. Se la classificazione non viene scelta, le righe saranno restituite in ordine sparso. L'ordine attuale in quel caso dipenderà dai tipi di plan di scansione e di join e dall'ordine du disco, ma non bisogna contarci. Un particolare ordine si output puà essere garantito solo se il passo di ordinamento viene scelto esplicitamente.

La clausola ORDER BY specifica l'ordine di classificazione:

SELECT select_list
    FROM table_expression
    ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }]
             [, sort_expression2 [ASC | DESC] [NULLS { FIRST | LAST }] ...]

L'espressione/i di classificazione puà essere qualsiasi espressione che dovrebbe essere valida nell'elenco di selezione della query. Un esempio è:

SELECT a, b FROM table1 ORDER BY a + b, c;

Quando viene specificata più di un'espressione, i valori successivi sono usati per classificare righe che sono uguali in accordo ai valori precedenti. Ogni espressione può essere seguita da una parola chiave ASC o DESC per impostare la direzione d'ordinamento come ascendente o discendente. L'ordinamento ASC è il predefinito. Ordinamento ascendente mette valori più piccoli prima, dove «più piccoli» sono definiti dall'operatore <. Similmente, ordinamento discendente è determinato con l'operatore >. [5]

Le opzioni NULLS FIRST e NULLS LAST possono essere usate per determinare se i null appaiono prima o dopo i valori non-null nell'ordinamento. In modo predefinito, valori null sono considerati maggiori di qualsiasi valore non-null; perciò, NULLS FIRST è il modo predefinito per ordinameni DESC, altrimento NULLS LAST.

Si noti come le opzioni di ordinamento sono considerateindipendentemente per ogni colonna. Per esempio ORDER BY x, y DESC significa ORDER BY x ASC, y DESC, che non è la stessa cosa di ORDER BY x DESC, y DESC.

Una sort_expression può essere anche l'etichetta di colonna il numero di una colonna di output, come in:

SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, max(b) FROM table1 GROUP BY a ORDER BY 1;

entrambe ordinano usando la prima colonna di output. Notare che un nome di colonna di output deve essere isolato, quindi, non può essere usato in una espressione - per esempio, questo non è corretto:

SELECT a + b AS sum, c FROM table1 ORDER BY sum + c;          -- wrong

Questa restrizione serve a ridurre l'ambiguità. C'è sempre ambiguità se un elemento ORDER BY è un nome semplice che potrebbe corrispondere al nome di una colonna di output o una colonna della tabella espressione. La colonna di output viene usata in quei casi. Questo causerebbe solo confusione se si usa AS per rinominare una colonna di output per corrispondere ad altri nomi di colonne.

ORDER BY può essere applicato al risultato di una combinazione di UNION, INTERSECT, o EXCEPT, ma in questo caso è permesso solo ordinare per nomi o numeri di colonne di output, non per espressioni.



[5] Attualmente, PostgreSQL™ usa la classe operatore B-tree predefinita per i tipi di dato delle espressioni per determinare l'ordinamento per ASC e DESC. Convenzionalmente, i tipi di dato saranno impostati in modo che gli operatori < e > corrispondano a questo ordinamento, ma per quanto riguarda un tipo di dato definito dall'utente si potrebbe scegliere di fare qualcosa di diverso.

Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Query > Classificazione di righe
PrecedenteQuery di combinazioneLIMIT e OFFSETSuccessivo