Domingo 19 Mai 2024

A cláusula ORDER BY especifica uma ordenação das linhas da tabela de resultados.

Se uma única especificação de classificação (uma chave de classificação com direção associada) for identificada, as linhas serão ordenadas pelos valores dessa especificação de classificação. Se mais de uma especificação de classificação for identificada, as linhas serão ordenadas pelos valores da primeira especificação de classificação identificada, depois pelos valores da segunda especificação de classificação identificada e assim por diante. Cada chave de classificação não pode ter um tipo de dados CLOB, DBCLOB, BLOB, XML, tipo distinto em qualquer um desses tipos ou tipo estruturado.

Uma coluna nomeada na lista de seleção pode ser identificada por uma chave de classificação que é um simple-integer ou um simple-column-name . Uma coluna sem nome na lista de seleção deve ser identificada por um inteiro simples ou, em alguns casos, por uma expressão de chave de classificação que corresponda à expressão na lista de seleção  consulte os detalhes de expressão de chave de classificação ). Uma coluna não tem nome se a cláusula AS não for especificada e for derivada de uma constante, uma expressão com operadores ou uma função.

A ordenação é realizada de acordo com as regras de comparação. Se uma cláusula ORDER BY contiver colunas de ponto flutuante decimais e várias representações do mesmo  número existirem nessas colunas, a ordem das várias representações do mesmo número não será especificada. O valor nulo é maior do que todos os outros valores. Se a cláusula  ORDER BY não ordenar completamente as linhas, as linhas com valores duplicados de todas as colunas identificadas serão exibidas em uma ordem arbitrária.

nome-da-coluna-simples
Geralmente identifica uma coluna da tabela de resultados. Nesse caso, o nome da coluna simples deve ser o nome da coluna de uma coluna nomeada na lista de seleção. O nome de coluna simples também pode identificar um nome de coluna de uma tabela, exibição ou tabela aninhada identificada na cláusula FROM se a consulta for uma subseleção. Isso  inclui colunas definidas como ocultas implicitamente. Ocorre um erro nas seguintes situações:

  • Se a subseleção especificar DISTINCT na cláusula de seleção;
  • Se a subseleção produzir um resultado agrupado e o nome da coluna simples não for uma expressão de agrupamento;

Determinar qual coluna é usada para ordenar o resultado é descrito em “ Nomes de coluna em chaves de classificação ” na seção “ Notas ” .

inteiro simples
Deve ser maior que 0 e não maior que o número de colunas na tabela de resultados. O inteiro n identifica a n - ésima coluna da tabela de resultados.

expressão-chave de classificação
Uma expressão que não é simplesmente um nome de coluna ou uma constante inteira sem sinal. A consulta à qual a ordenação é aplicada deve ser uma subseleção para usar  essa forma de chave de classificação. A expressão de chave de classificação não pode incluir uma seleção completa escalar correlacionada ou uma função com uma ação externa.

Há vários casos especiais que restringem ainda mais as expressões que podem ser especificadas.

  • DISTINCT é especificado na cláusula SELECT da subseleção.
    A expressão de chave de classificação deve corresponder exatamente a uma expressão na lista de seleção da subseleção (seleções completas escalares nunca são correspondidas).
  • A subseleção é agrupada.
    A expressão de chave de classificação pode:
    • ser uma expressão na lista de seleção da subseleção,
    • inclua uma expressão de agrupamento da cláusula GROUP BY da subseleção
    • incluir uma função agregada, constante ou variável de host.

ASC
Ordene as linhas em ordem crescente. Este é o padrão.

DESC
Ordene as linhas em ordem decrescente.

NULLS FIRST
Ao ordenar linhas em ordem crescente ou decrescente, liste valores nulos antes de todos os outros valores.

NULLS LAST
Ao ordenar as linhas em ordem crescente ou decrescente, liste valores nulos após todos os outros valores.

ORDER OF designador de mesa
Especifica que a mesma ordenação usada em table-designator se aplica à tabela de resultados da subseleção. Deve haver uma referência de tabela correspondente ao designador  de tabela na cláusula FROM da subseleção que especifica essa cláusula. A ordenação aplicada é a mesma como se as colunas da cláusula ORDER BY na subseleção  aninhada (ou seleção completa) fossem incluídas na subseleção externa (ou seleção completa) e essas colunas fossem especificadas no lugar da cláusula ORDER OF.

Observe que esta forma não é permitida em uma seleção completa (além da forma degenerativa de uma seleção completa). Por exemplo, o seguinte não é válido:

(SELECT C1 FROM T1
   ORDER BY C1)
UNION
SELECT C1 FROM T2
   ORDER BY ORDER OF T1

O exemplo a seguir é válido:

SELECT C1 FROM
   (SELECT C1 FROM T1
      UNION
    SELECT C1 FROM T2
    ORDER BY C1 ) AS UTABLE
ORDER BY ORDER OF UTABLE

INPUT SEQUENCE

Especifica que, para uma instrução INSERT, a tabela de resultados refletirá a ordem de entrada das linhas de dados ordenadas. A ordenação de INPUT SEQUENCE só pode ser  especificada se uma instrução INSERT for usada em uma cláusula FROM. Se INPUT SEQUENCE for especificado e os dados de entrada não forem ordenados, a cláusula INPUT  SEQUENCE será ignorada.