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.

  • 🔠 Comportamento padrão: A cláusula ORDER BY ordena em ordem crescente quando nem ASC nem DESC são especificados, portanto ASC é opcional na maioria das instruções.
  • ⬆️ Palavra-chave ASC: ASC organiza os números do menor para o maior, as sequências de letras de A a Z e as datas da mais antiga para a mais recente.
  • ⬇️ Palavra-chave DESC: O formato DESC inverte essa sequência, o que é adequado para históricos de pagamentos do mais recente para o mais antigo e listas em ordem decrescente de data de nascimento.
  • 🧮 Classificação em múltiplas colunas: A ordem das colunas é importante. ORDER BY gender, date_of_birth DESC ordena primeiro o gênero em ordem crescente e, em seguida, as datas em ordem decrescente dentro de cada grupo.
  • 🔎 Combinação de cláusulas: WHERE filtra as linhas, GROUP BY as agrega, ORDER BY ordena o resultado em sequência e LIMIT o remove aos poucos.
  • ⚙️ Fator de desempenho: Um índice na coluna classificada permite MySQL Para evitar uma operação de classificação de arquivos em tabelas grandes.

ORDENAR POR em MySQL

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.

Palavras-chave DESC e ASCASC é a forma abreviada de ascendente Palavras-chave DESC e ASCMySQL 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 E-mail
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.

MySQL resultado da consulta ORDER BY DESC

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;

MySQL resultado da consulta ORDER BY 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 E-mail
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 E-mail
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.

MySQL Exemplo de ORDER BY com duas colunas

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.

  1. A PARTIR DE Lê as linhas da tabela.
  2. ONDE Descarta as linhas que não atendem à condição.
  3. GROUP BY Agrupa as linhas restantes e, em seguida, filtra esses grupos usando o operador HAVING.
  4. ORDENAR POR sequências quaisquer linhas restantes.
  5. 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.

Perguntas Frequentes

Sim, é possível. Sem um índice na coluna ordenada, MySQL Executa uma ordenação de arquivos em todo o conjunto de resultados. Adicionar um índice que corresponda à coluna e à direção da cláusula ORDER BY permite que o servidor leia as linhas em ordem e ignore essa etapa.

Geralmente não. As ordenações padrão, como utf8mb4_0900_ai_ci, não diferenciam maiúsculas de minúsculas, portanto, "apple" e "Apple" são classificados juntos. Uma ordenação binária ou _cs, ou ORDER BY BINARY nome_da_coluna, produz uma ordenação que diferencia maiúsculas de minúsculas, onde as letras maiúsculas vêm primeiro.

Sim. A função ORDER BY RAND() embaralha o conjunto de resultados, o que é útil para escolher um filme ou membro aleatório. Ela pontua cada linha antes de ordenar, portanto, use-a em conjunto com LIMIT e evite usá-la em tabelas muito grandes.

Sim. Auxiliares de IA integrados em ferramentas como... MySQL Workbench Converta solicitações em linguagem natural em instruções SELECT com ORDER BY. Sempre revise a coluna e a direção da classificação gerada, pois uma IA não consegue determinar a ordenação necessária para o seu relatório.

Em parte. Consultores baseados em IA leem os registros de consultas lentas e sugerem índices que eliminam as operações de classificação de arquivos. As sugestões ainda precisam de revisão humana, já que cada índice adicional torna as inserções e atualizações na mesma tabela mais lentas.

Resuma esta postagem com: