Após a consulta ter produzido a tabela de saída (após a lista de seleção ter sido processada) esta tabela pode, opcionalmente, ser ordenada. Se nenhuma ordenação for especificada, as linhas retornam em uma ordem aleatória. Neste caso, a ordem real depende dos tipos de plano de varredura e de junção e da ordem no disco, mas não se deve confiar nisto. Uma ordem de saída específica somente pode ser garantida se a etapa de ordenação for especificada explicitamente.
A cláusula ORDER BY especifica a ordem de classificação:
SELECT lista_de_seleção FROM expressão_de_tabela ORDER BY coluna1 [ASC | DESC] [, coluna2 [ASC | DESC] ...]
onde coluna1, etc., fazem referência às colunas da lista de seleção. Pode ser tanto o nome de saída da coluna (consulte a Seção 7.3.2) quanto o número da coluna. Alguns exemplos:
SELECT a, b FROM tabela1 ORDER BY a; SELECT a + b AS soma, c FROM tabela1 ORDER BY soma; SELECT a, sum(b) FROM tabela1 GROUP BY a ORDER BY 1;
Como extensão ao padrão SQL, o PostgreSQL também permite ordenar por expressões arbitrárias:
SELECT a, b FROM tabela1 ORDER BY a + b;
Também é permitido fazer referência a nomes de colunas da cláusula FROM que não estão presentes na lista de seleção:
SELECT a FROM tabela1 ORDER BY b;
Mas estas extensões não funcionam nas consultas envolvendo UNION, INTERSECT ou EXCEPT, e não são portáveis para outros bancos de dados SQL.
Cada especificação de coluna pode ser seguida pela palavra opcional ASC ou DESC, para definir a direção de ordenação como ascendente ou descendente. A ordem ASC é o padrão. A ordenação ascendente coloca os valores menores na frente, sendo que "menor" é definido nos termos do operador <. De forma semelhante, a ordenação descendente é determinada pelo operador >. [1]
Se for especificada a ordenação por mais de uma coluna, as últimas entradas são utilizadas para ordenar as linhas iguais sob a ordem imposta pelas colunas de ordenação anteriores.
[1] |
Na verdade, o PostgreSQL utiliza a classe de operadores B-tree padrão para o tipo de dado da coluna para determinar a ordem de classificação para ASC e DESC. Por convenção, os tipos de dado são configurados de maneira que os operadores < e > correspondam a esta ordem de classificação, mas o projetista de um tipo de dado definido pelo usuário pode decidir fazer algo diferente. |