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: