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

