ORDENAR POR em MySQLConsulta ASC e DESC com exemplo
โก Resumo Inteligente
ORDENAR POR em MySQL Classifica os conjuntos de resultados de consultas em ordem crescente ou decrescente por meio das palavras-chave ASC e DESC. As seรงรตes abaixo explicam a sintaxe, a classificaรงรฃo de coluna รบnica e de mรบltiplas colunas, a inserรงรฃo de valores NULL e exemplos prรกticos executados no banco de dados de exemplo myflixdb.

O que รฉ ORDER BY em MySQL?
MySQL ORDENAR POR ร uma clรกusula usada com a consulta SELECT para classificar os dados de forma ordenada. MySQL A clรกusula ORDER BY classifica o conjunto de resultados da consulta em ordem crescente ou decrescente, com base em uma coluna ou em vรกrias colunas simultaneamente.
Quando o comando SELECT รฉ usado isoladamente, as linhas sรฃo retornadas na ordem em que o mecanismo de armazenamento as lรช, o que nรฃo garante uma ordem especรญfica. A ordenaรงรฃo consiste simplesmente em reorganizar essas linhas em uma sequรชncia especรญfica. Ela pode ser aplicada a dados numรฉricos, de texto e de data.
MySQL ORDENAR POR Sintaxe
Antes de analisarmos os exemplos, รฉ รบtil observar onde a clรกusula se encontra dentro de uma instruรงรฃo SELECT completa.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
AQUI
- "Instruรงรฃo SELECT... " รฉ a consulta select regular.
- "| " representa alternativas.
- โ[WHERE condiรงรฃo | GROUP BY `nome_do_campo(s)` HAVING condiรงรฃo]โ รฉ a condiรงรฃo opcional usada para filtrar o conjunto de resultados da consulta.
- "ORDENAR POR" Executa a ordenaรงรฃo do conjunto de resultados da consulta.
- โ[ASC | DESC]โ รฉ a palavra-chave usada para classificar o conjunto de resultados em ordem crescente ou decrescente. Observe que ASC รฉ o padrรฃo.
O que sรฃo palavras-chave DESC e ASC?
ASC e DESC sรฃo as duas direรงรตes de classificaรงรฃo aceitas pelo comando ORDER BY. A tabela abaixo compara essas direรงรตes para os tipos de dados que vocรช classificarรก com mais frequรชncia.
ASC รฉ a forma abreviada de ascendente |
MySQL DESC รฉ a forma abreviada de descendente |
|---|---|
| ร usado para classificar os resultados da consulta em um estilo de cima para baixo. | ร utilizado para ordenar os resultados da consulta de baixo para cima. |
| Ao trabalhar com tipos de dados de data, a data mais antiga รฉ mostrada no topo da lista. | Ao trabalhar com dados do tipo data, a data mais recente รฉ exibida no topo da lista. |
| Ao trabalhar com tipos de dados numรฉricos, os valores mais baixos sรฃo mostrados no topo da lista. | Ao trabalhar com tipos de dados numรฉricos, os valores mais altos sรฃo exibidos no topo do conjunto de resultados da consulta. |
| Ao trabalhar com tipos de dados de string, o conjunto de resultados da consulta รฉ classificado daqueles que comeรงam com a letra A e vรฃo atรฉ a letra Z. | Ao trabalhar com tipos de dados de string, o conjunto de resultados da consulta รฉ classificado daqueles que comeรงam com a letra Z e vรฃo atรฉ a letra A. |
As palavras-chave SQL DESC e ASC sรฃo usadas em conjunto com a instruรงรฃo SELECT e o MySQL Clรกusula ORDER BY.
Sintaxe DESC e ASC
A palavra-chave SQL DESC sort possui a seguinte sintaxe bรกsica.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
AQUI
- SELECIONE {nome(s) do(s) campo(s) | *} FROM nome(s) da(s) tabela(s) รฉ a declaraรงรฃo que contรฉm os campos e a(s) tabela(s) das quais o conjunto de resultados serรก obtido.
- [ONDE condiรงรฃo] รฉ opcional, mas pode ser usado para filtrar os dados de acordo com a condiรงรฃo fornecida.
- ORDENAR POR nome(s) do(s) campo(s) ร obrigatรณrio e indica o campo no qual a classificaรงรฃo serรก realizada. MySQL A palavra-chave DESC especifica que a classificaรงรฃo รฉ feita em ordem decrescente.
- [LIMITE N] ร opcional, mas pode ser usado para limitar o nรบmero de linhas retornadas do conjunto de resultados da consulta.
Por que usar DESC e ASC em MySQL?
Conhecer a sintaxe รฉ apenas metade da histรณria. A razรฃo pela qual o ORDER BY existe รฉ que um conjunto de resultados fรกcil de gerar para um banco de dados nem sempre รฉ fรกcil de interpretar para uma pessoa.
Imagine que vocรช queira imprimir o histรณrico de pagamentos de um membro de uma videoteca para que a recepรงรฃo possa responder ร s dรบvidas rapidamente. ร muito mais lรณgico que os pagamentos sejam impressos em ordem cronolรณgica decrescente, comeรงando pelo mais recente e seguindo atรฉ o mais antigo. A palavra-chave DESC em SQL รฉ muito รบtil nesse caso, pois permite classificar a lista pela data do pagamento.
Agora, imagine que o departamento de marketing queira uma lista de filmes por categoria, para que os membros possam ver quais tรญtulos a biblioteca possui antes de alugar. Ordenar os nomes das categorias e os tรญtulos dos filmes em ordem crescente permite que os membros encontrem informaรงรตes rapidamente, exatamente como fariam em um รญndice. A palavra-chave ASC serve a esse propรณsito.
Resumindo, a funรงรฃo ORDER BY transforma um conjunto de resultados brutos em um relatรณrio. A palavra-chave escolhida depende da pergunta que o leitor estรก fazendo: o que aconteceu mais recentemente pede DESC, enquanto Onde posso encontrar este item? solicita ASC.
MySQL ORDENAR POR Exemplo
Todos os exemplos a seguir sรฃo executados no banco de dados de exemplo myflixdb. Comece com a tabela de membros nรฃo ordenada, que รฉ retornada em sua ordem padrรฃo.
SELECT * FROM members;
Executando o script acima em MySQL A anรกlise do Workbench com o banco de dados myflixdb nos fornece os seguintes resultados, conforme mostrado abaixo.
| nรบmero de membro | nomes completos | gรชnero | data_de_nascimento | endereรงo fรญsico | endereรงo_postal | nรบmero_de_contato | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Feminino | 21-07-1980 | Lote da Primeira Rua nยบ 4 | Mala Privada | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janete Smith Jones | Feminino | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Masculino | 12-07-1989 | Rua 3 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Feminino | 14-02-1984 | Rua 2 23 | NULL | NULL | NULL |
| 5 | Leonardo Hofstadter | Masculino | NULL | crista de madeira | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Masculino | NULL | crista de madeira | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Masculino | NULL | crista de madeira | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Masculino | 14-02-1984 | crista de madeira | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Masculino | 24-08-1981 | Parque Sul | Caixa postal 4563 | 987786553 | NULL |
Ordenando em ordem decrescente com DESC
Suponha que o departamento de marketing queira os dados dos membros organizados em ordem decrescente de data de nascimento. Isso ajuda a equipe a enviar felicitaรงรตes de aniversรกrio em tempo hรกbil. A lista รฉ gerada pela consulta abaixo.
SELECT * FROM members ORDER BY date_of_birth DESC;
Executando o script acima em MySQL A anรกlise do Workbench com o banco de dados myflixdb nos fornece os seguintes resultados, conforme mostrado abaixo.
Ordenaรงรฃo em ordem crescente com ASC
A mesma consulta em ordem crescente simplesmente troca a palavra-chave.
SELECT * FROM members ORDER BY date_of_birth ASC;
Observaรงรฃo: NULL significa nenhum valor, o que รฉ diferente de zero ou de uma string vazia. Observe em ambas as capturas de tela como as datas NULL estรฃo agrupadas: MySQL O sistema considera o valor NULL como inferior a qualquer outro valor, portanto, as linhas com valor NULL aparecem primeiro em ASC e por รบltimo em DESC.
Como classificar por vรกrias colunas em MySQL
A classificaรงรฃo por uma รบnica coluna responde a perguntas simples. Os relatรณrios geralmente precisam de um segundo nรญvel de ordenaรงรฃo, e a funรงรฃo ORDER BY aceita uma lista de campos separados por vรญrgula exatamente para essa finalidade.
Considere o seguinte script de classificaรงรฃo SQL que lista todos os registros de membros sem nenhuma instruรงรฃo explรญcita.
SELECT * FROM `members`;
A execuรงรฃo do script acima fornece os seguintes resultados mostrados abaixo.
| nรบmero de membro | nomes completos | gรชnero | data_de_nascimento | endereรงo fรญsico | endereรงo_postal | nรบmero_de_contato | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Feminino | 21-07-1980 | Lote da Primeira Rua nยบ 4 | Mala Privada | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janete Smith Jones | Feminino | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Masculino | 12-07-1989 | Rua 3 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Feminino | 14-02-1984 | Rua 2 23 | NULL | NULL | NULL |
| 5 | Leonardo Hofstadter | Masculino | NULL | crista de madeira | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Masculino | NULL | crista de madeira | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Masculino | NULL | crista de madeira | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Masculino | 14-02-1984 | crista de madeira | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Masculino | 24-08-1981 | Parque Sul | Caixa postal 4563 | 987786553 | NULL |
Classificando uma รบnica coluna pela ordem padrรฃo
Suponha que desejamos uma lista que ordene o conjunto de resultados da consulta usando o campo de gรชnero. O script abaixo faz isso sem especificar uma direรงรฃo.
SELECT * FROM `members` ORDER BY `gender`;
| nรบmero de membro | nomes completos | gรชnero | data_de_nascimento | endereรงo fรญsico | endereรงo_postal | nรบmero_de_contato | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Feminino | 21-07-1980 | Lote da Primeira Rua nยบ 4 | Mala Privada | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janete Smith Jones | Feminino | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Feminino | 14-02-1984 | Rua 2 23 | NULL | NULL | NULL |
| 3 | Robert Phil | Masculino | 12-07-1989 | Rua 3 34 | NULL | 12345 | rm@tstreet.com |
| 5 | Leonardo Hofstadter | Masculino | NULL | crista de madeira | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Masculino | NULL | crista de madeira | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Masculino | NULL | crista de madeira | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Masculino | 14-02-1984 | crista de madeira | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Masculino | 24-08-1981 | Parque Sul | Caixa postal 4563 | 987786553 | NULL |
Os membros "femininos" sรฃo exibidos primeiro, seguidos pelos membros "masculinos". Isso ocorre porque, quando a clรกusula ORDER BY รฉ usada sem especificar o ASC ou MySQL Palavra-chave DESC, MySQL Por padrรฃo, ordena o conjunto de resultados da consulta em ordem crescente.
Ordenando duas colunas em direรงรตes opostas
Vejamos agora um exemplo que executa o classificaรงรฃo usando duas colunasA primeira coluna รฉ classificadas in Ordem ascendente por padrรฃo, enquanto a segunda coluna รฉ classificadas in ordem decrescente.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Executando o script acima em MySQL A anรกlise do Workbench com o banco de dados myflixdb apresentou os seguintes resultados.
A coluna de gรชnero foi classificada em ordem crescente por padrรฃo, enquanto a coluna de data de nascimento foi classificada explicitamente em ordem decrescente. Cada palavra-chave de direรงรฃo se aplica apenas ร coluna que a segue.
Como combinar ORDER BY com WHERE, LIMIT e GROUP BY
ORDER BY raramente รฉ a รบnica clรกusula em uma consulta de produรงรฃo. MySQL sempre avalia as clรกusulas em uma sequรชncia fixa, e conhecer essa sequรชncia explica por que os resultados sรฃo como sรฃo.
- A PARTIR DE Lรช as linhas da tabela.
- ONDE Descarta as linhas que nรฃo atendem ร condiรงรฃo.
- GROUP BY Agrupa as linhas restantes e, em seguida, filtra esses grupos usando o operador HAVING.
- ORDENAR POR sequรชncias quaisquer linhas restantes.
- LIMITE Extrai o nรบmero solicitado de linhas da lista ordenada.
Como a clรกusula ORDER BY รฉ executada depois de WHERE e GROUP BY, mas antes de LIMIT, uma consulta como "os cinco membros mais jovens de Woodcrest" รฉ expressa em uma รบnica instruรงรฃo.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
A mesma ordem se aplica aos resultados agrupados. Valores agregados produzidos por funรงรตes agregadas Por exemplo, a categoria COUNT pode ser classificada, de forma que a categoria mais movimentada suba para o topo do relatรณrio.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Dica: A clรกusula ORDER BY permite classificar por um alias de coluna, por uma expressรฃo ou atรฉ mesmo pela posiรงรฃo da coluna, como em ORDER BY 3. A classificaรงรฃo por posiรงรฃo รฉ frรกgil, pois a inserรงรฃo de uma nova coluna na lista SELECT altera silenciosamente a chave de classificaรงรฃo. Em vez disso, nomeie a coluna.
Um ponto importante sobre desempenho que vale a pena lembrar รฉ o seguinte: quando a coluna classificada contรฉm um รญndice, MySQL ร possรญvel ler as linhas na ordem do รญndice e ignorar completamente a classificaรงรฃo. Sem um รญndice, tabelas grandes forรงam uma classificaรงรฃo de arquivos na memรณria ou em disco, que รฉ o motivo usual para a lentidรฃo de uma consulta de relatรณrio.

ASC รฉ a forma abreviada de ascendente
MySQL DESC รฉ a forma abreviada de descendente

