ORDEM MySQL POR

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:

ORDER BY column1 ASC;
Code language: SQL (Structured Query Language) (sql)

E esta ORDER BY cláusula ordena o resultado por ordem descendente:

ORDER BY column1 DESC;
Code language: SQL (Structured Query Language) (sql)

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:

ORDER BY column1 ASC;
Code language: SQL (Structured Query Language) (sql)

and

ORDER BY column1;
Code language: SQL (Structured Query Language) (sql)

Se quiser ordenar o resultado definido por múltiplas colunas, especifique uma lista de colunas separadas por vírgulas na cláusula ORDER BY:

ORDER BY column1, column2;
Code language: SQL (Structured Query Language) (sql)

É possível ordenar o resultado por uma coluna em ordem ascendente, e depois por outra coluna em ordem descendente:

ORDER BY column1 ASC, column2 DESC;
Code language: SQL (Structured Query Language) (sql)

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 no column1 não mudará neste passo, apenas a ordem dos valores no column2 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.

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname;
Code language: SQL (Structured Query Language) (sql)

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:

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC;
Code language: SQL (Structured Query Language) (sql)

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:

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;
Code language: SQL (Structured Query Language) (sql)

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.

SELECT orderNumber, orderlinenumber, quantityOrdered * priceEachFROM orderdetailsORDER BY quantityOrdered * priceEach DESC;
Code language: SQL (Structured Query Language) (sql)

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:

SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotalFROM orderdetailsORDER BY subtotal DESC;
Code language: SQL (Structured Query Language) (sql)

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:

FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
Code language: SQL (Structured Query Language) (sql)

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *