A cláusula ORDER BY
controla a ordem pela qual as linhas são devolvidas ou processadas. Ele pode ser usado em qualquer seletionquery, incluindo um operando de INSERT
ou UPSERT
, bem como com DELETE
e UPDATE
afirmações.
- Sinopse
- Parâmetros
- preservação da ordem
- Ordenação de linhas sem FIM POR
- Classificação através de simples seleções de coluna
- Classificação utilizando várias colunas
- invertendo a ordem de ordenação
- a Classificação em ordem de chave primária
- Ordenar em ordem de índice
- Ordenação de linhas em instruções DML
- ordenando o resultado dos apagamentos
- Veja também:
Sinopse
Parâmetros
O ORDER BY
cláusula tem uma lista separada por vírgulas de ordenação especificações.Cada especificação de encomenda é composta por uma selecção de colunas seguida opcionalmente pela palavra-chave ASC
ou DESC
.
Cada seleção de coluna pode assumir uma das seguintes formas:
- Uma simples seleção de coluna, determinado da seguinte forma:
- O nome de um rótulo de coluna configurado com
AS
anteriormente emSELECT
cláusula. Isto usa o valor calculado pela cláusulaSELECT
como chave de triagem. - um número inteiro positivo, designando uma das colunas na fonte de dados, quer a cláusula
FROM
da cláusulaSELECT
, quando ocorre, quer a tabela a ser escrita porDELETE
ouUPDATE
. Isto usa o valor de entrada correspondente da fonte de dados para usar como chave de ordenação. - uma expressão escalar arbitrária. Isto usa o resultado de avaliar essa expressão como a chave de ordenação.
- O nome de um rótulo de coluna configurado com
- A notação
PRIMARY KEY <table_name>
. Isto usa a(s) coluna (s) da (S) chave (s) principal (Is) da tabela indicada como chave de ordenação. Esta tabela deve fazer parte da fonte de dados. - a notação
INDEX <table_name>@<index_name>
. Isto usa as colunas indexadas pelo índice dado como chave de ordenação. Esta tabela deve fazer parte da fonte de dados.
A Palavra-chave opcional ASC
depois de uma seleção de coluna indica para usar a chave de ordenação como-é, e portanto não tem significado.
A Palavra-chave opcional DESC
inverte a direcção da(s)coluna (s) seleccionada (s) pela selecção que precede imediatamente.
CockroachDB suportaNULLS FIRST
/NULLS LAST
em ORDER BY
cláusulas de compatibilidade com a sintaxe de ordenação de linhas PostgreSQL.
Suporte para NULLS LAST
é atualmente apenas sintaxe. Se especificar NULLS LAST
numa cláusula ORDER BY
, CockroachDB utiliza NULLS FIRST
e não devolve um erro.
preservação da ordem
em geral,a ordem dos resultados intermédios de uma consulta não é garantida, mesmo que seja especificado ORDER BY
. Por outras palavras, a cláusula ORDER BY
só é eficaz na declaração de alto nível. Por exemplo, ele é ignorado pelo queryplanner quando presente em uma sub-consulta em uma cláusula FROM
como segue:
> SELECT * FROM a, b ORDER BY a.x; -- valid, effective> SELECT * FROM (SELECT * FROM a ORDER BY a.x), b; -- ignored, ineffective
no Entanto, quando a combinação de consultas junto withsub-consultas,algumas combinações de tornar o ORDER BY
cláusula em um sub-querysignificant:
- A ordenação do operando de um
WITH ORDINALITY
cláusula(dentro deFROM
operando de umSELECT
cláusula) é preservado,para controlar a numeração das linhas. - a ordenação do operando de uma cláusula stand-alone
LIMIT
ouOFFSET
(withinaFROM
operando de uma cláusulaSELECT
) é preservada, para determinar quais linhas são mantidas no resultado. - a ordenação da fonte de dados para uma declaração
INSERT
ou uma declaraçãoUPSERT
que também usaLIMIT
é preservada, para determinar quais linhas são processadas, mas não a sua ordem. - a ordenação indicada para uma declaração
UPDATE
ouDELETE
que também usaLIMIT
é usada para determinar quais linhas são processadas, mas não a sua ordem.(Esta é uma extensão CockroachDB.) - the ordering of a sub-query used in a scalar expressionis preserved.
por exemplo, usando WITH ORDINALITY
:
> SELECT * FROM (SELECT * FROM a ORDER BY a.x) WITH ORDINALITY; -- ensures that the rows are numbered in the order of column a.x.
Por exemplo, usando um stand-alone LIMIT
cláusula FROM
:
Por exemplo, usando uma sub-consulta em contexto escalar:
Ordenação de linhas sem FIM POR
Sem ORDER BY
, linhas são processadas ou devolvido em anon-ordem determinista. “Não-determinístico” significa que o ordenador real pode depender do plano lógico, da ordem dos dados no disco, da topologia do cluster CockroachDB, e é geralmente variável ao longo do tempo.
Classificação através de simples seleções de coluna
Considerando a seguinte tabela:
> CREATE TABLE a(a INT);> INSERT INTO a VALUES (1), (3), (2);
As seguintes afirmações são equivalentes:
+---------+| a |+---------+| 1 || 2 || 3 |+---------+(3 rows)
Note que a ordem das regras assunto. Se houver ambiguidade, a prioridade AS
aliasestake sobre as colunas de fonte de dados, por exemplo:
também é possível ordenar usando uma expressão escalar arbitrária calculada para cada linha, por exemplo:
> SELECT a, b FROM ab ORDER BY a + b; -- orders by the result of computing a+b.
Classificação utilizando várias colunas
Quando mais do que um pedido de especificação é dada, mais tarde especificações são usedto linhas de ordem que são iguais sobre as especificações anteriores, por exemplo:
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b, a;
Este classifica os resultados por coluna b
, e, em seguida, se há multiplerows que têm o mesmo valor na coluna b
, ele irá, em seguida, a fim theserows pela coluna a
.
invertendo a ordem de ordenação
A Palavra-chave DESC
(“descendente”) pode ser adicionada após uma especificação de ordenação para alterar a sua ordem. Isto pode ser especificado separadamente para cada especificação, por exemplo:
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b DESC, a; -- sorts on b descending, then a ascending.
a Classificação em ordem de chave primária
O ORDER BY PRIMARY KEY
notação garante que os resultados arepresented na ordem de chave primária.
A vantagem é que, para consultas usando o índice principal,o que garante a ordem ao mesmo tempo que garante não haverá anadditional classificação de computação para alcançá-lo, por exemplo:
> CREATE TABLE kv(k INT PRIMARY KEY, v INT);> SELECT k, v FROM kv ORDER BY PRIMARY KEY kv; -- guarantees ordering by column k.
Se uma chave primária utiliza a palavra-chave DESC
já, em seguida, sua meaningwill ser invertidas (cancelada) se a ORDER BY
cláusula também usaDESC
, por exemplo:
Ordenar em ordem de índice
O ORDER BY INDEX
notação garante que os resultados são presentedin o fim de um determinado índice.
A vantagem é que, para consultas usando esse índice, thisguarantees a ordem ao mesmo tempo que garante não haverá anadditional classificação de computação para alcançá-lo, por exemplo:
> CREATE TABLE kv(k INT PRIMARY KEY, v INT, INDEX v_idx(v));> SELECT k, v FROM kv ORDER BY INDEX kv@v_idx; -- guarantees ordering by column v.
Se um índice utiliza a palavra-chave DESC
já, em seguida, sua meaningwill ser invertidas (cancelada) se a ORDER BY
cláusula também usaDESC
, por exemplo:
Ordenação de linhas em instruções DML
Quando usando ORDER BY
com um INSERT
,UPSERT
, UPDATE
ouDELETE
(i.e., uma declaração DML), a cláusula ORDER BY
isignored se não for usada em combinação com LIMIT
e / ouOFFSET
.
A combinação de ambos ORDER BY
e LIMIT
/ OFFSET
determina quais as linhas da entrada que são usadas para inserir, actualizar ou eliminar os tabledados, mas não determina em que ordem a mutação ocorre.
por exemplo, usando LIMIT
em INSERT
:
> INSERT INTO a SELECT * FROM b ORDER BY b.x LIMIT 1; -- ensures that only the first row of b in the order of column b.x -- is inserted into a.
A razão pela qual ORDER BY
não controla a ordem final das linhas na tabela é que a ordenação das linhas na Tabela alvo é determinada pelos seus índices primário e secundário.
para ordenar o resultado da cláusula RETURNING
, ver a ordenação do resultado dos apagamentos.
ordenando o resultado dos apagamentos
para ordenar o resultado de uma declaração DELETE
, use:
> WITH a AS (DELETE ... RETURNING ...) SELECT ... FROM a ORDER BY ...
por exemplo, veja ordenar e retornar as linhas apagadas.
Veja também:
- Consultas de Seleção
- Expressões Escalares
INSERT
UPSERT
DELETE
UPDATE
esta página Foi útil?
Sim Não