Resumo: neste tutorial, aprenderá como ordenar um conjunto de resultados utilizando o MySQL ORDER BY
cláusula.
Introdução à ORDEM MySQL POR cláusula
Quando utiliza a instrução SELECT
para consultar dados de uma tabela, o conjunto de resultados não é ordenado. Isto significa que as linhas do conjunto de resultados podem estar em qualquer ordem.
Para ordenar o conjunto de resultados, adiciona-se a cláusula ORDER BY
à declaração SELECT
. O seguinte ilustra a sintaxe do ORDER BY
cláusula:
Nesta sintaxe, especifica uma ou mais colunas que deseja ordenar após a cláusula ORDER BY
.
O ASC
significa ascendente e o DESC
significa descendente. Utiliza-se ASC
para ordenar o resultado definido em ordem ascendente e DESC
para ordenar o resultado definido em ordem descendente.
Esta ORDER BY
cláusula ordena o resultado por ordem ascendente:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
E esta ORDER BY
cláusula ordena o resultado por ordem descendente:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 DESC;
Por defeito, a cláusula ORDER BY
utiliza ASC
se não especificar explicitamente qualquer opção.
Por conseguinte, as seguintes cláusulas são equivalentes:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
and
Code language: SQL (Structured Query Language) (sql)ORDER BY column1;
Se quiser ordenar o resultado definido por múltiplas colunas, especifique uma lista de colunas separadas por vírgulas na cláusula ORDER BY
:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1, column2;
É possível ordenar o resultado por uma coluna em ordem ascendente, e depois por outra coluna em ordem descendente:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC, column2 DESC;
Neste caso, o ORDER BY
cláusula:
- First, ordenar o resultado definido pelos valores no
column1
em ordem ascendente. - Então, ordenar o resultado ordenado pelos valores na ordem
column2
em ordem decrescente. Note-se que a ordem dos valores nocolumn1
não mudará neste passo, apenas a ordem dos valores nocolumn2
muda.
Nota que a cláusula ORDER BY
é sempre avaliada após a cláusula FROM
e SELECT
.
PEDIDO MYSQL POR EXEMPLOS
Utilizaremos a tabela customers
da base de dados de amostras para a demonstração.
A) Usando a cláusula MySQL ORDER BY para ordenar valores numa coluna de exemplo
A consulta seguinte utiliza a cláusula ORDER BY
para classificar os clientes pelos valores na coluna contactLastName
em ordem ascendente.
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname;
Try It Out
se quiser ordenar os clientes pelo sobrenome na ordem descendente, usa a cláusula DESC
após a coluna contactLastname
na coluna ORDER BY
como se mostra na seguinte consulta:
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC;
Try It Out
B) Utilização da cláusula MySQL ORDER BY para ordenar valores em múltiplas colunas exemplo
Se quiser ordenar os clientes pelo apelido por ordem descendente e depois pelo primeiro nome por ordem ascendente, especifica tanto DESC
como ASC
na coluna correspondente, como se segue:
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;
Try It Out
Neste exemplo, a cláusula ORDER BY
ordena primeiro o resultado definido pelo apelido em ordem decrescente e depois ordena o resultado ordenado pelo primeiro nome em ordem ascendente para produzir o conjunto de resultados final.
C) Usando o MySQL ORDER BY para ordenar um resultado definido por um exemplo de expressão
Ver o seguinte orderdetails
tabela da base de dados da amostra.
A consulta seguinte selecciona os itens da linha de encomenda da tabela orderdetails
. Calcula o subtotal para cada item e ordena o conjunto de resultados com base no subtotal.
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderlinenumber, quantityOrdered * priceEachFROM orderdetailsORDER BY quantityOrdered * priceEach DESC;
Try It Out
Para tornar a consulta mais legível, pode atribuir a expressão na cláusula SELECT
cláusula um pseudónimo de coluna e utilizar esse pseudónimo de coluna na cláusula ORDER BY
como mostrado na seguinte consulta:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotalFROM orderdetailsORDER BY subtotal DESC;
Try It Out
Neste exemplo, utilizámos subtotal
como a coluna alias da expressão quantityOrdered * priceEach
e ordenámos o resultado definido pelo subtotal
alias.
A coluna alias pode ser utilizada na cláusula ORDER BY
porque a cláusula SELECT
é avaliada antes da cláusula ORDER BY
. Quando a cláusula ORDER BY
é avaliada, a coluna alias é acessível.
Using MySQL ORDER BY to sort data using a custom list
The ORDER BY
clause allows you to sort data using a custom list by using the FIELD()
function.
Ver o seguinte orders
tabela da base de dados de amostras.
P>Ponha que pretende ordenar as encomendas de venda com base nos seus estados na seguinte ordem:
- Em processo
- Em espera
- Cancelado
- Resolvido
- Disputado
- Enviado
Para fazer isto, pode usar a função FIELD()
para mapear cada estado de ordem para um número e ordenar o resultado pelo resultado da função FIELD()
:
Try It Out
A seguinte expressão:
Code language: SQL (Structured Query Language) (sql)FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
devolve o índice do status
na lista 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped'
.
Por exemplo, se o status
for In Process
, a função irá retornar 1. Se o status
for On Hold
, a função retornará 2, e assim por diante.
Neste tutorial, aprendeu como usar o MySQL ORDER BY
cláusula para ordenar linhas no resultado definido por uma ou mais colunas em ordem ascendente ou descendente.
- Este tutorial foi útil?
- Sim Não