Ícone do site Diego Macêdo

Como ordenar o resultado de uma consulta no MySQL (Cláusula ORDER BY)

Para você entender melhor este post, você precisa ter uma boa noção de como fazer consultas em uma tabela do MySQL. Sabendo disso, vamos começar a melhorar a nossa consulta, ordenando de acordo com as colunas, sejam ela de forma crescente ou decrescente.

A nossa sintaxe utilizada juntamente com o SELECT é o “ORDER BY“:

SELECT nomedascolunas FROM nomedatabel ORDER BY nomedacoluna ASC/DESC;

Então vamos aos exemplos. Supondo que eu queira fazer uma consulta numa tabela chamada “clientes” e quero pegar somente os nomes e número de telefones deles, mas que seja ordenado pelo nome de forma crescente, ou seja, de A até Z, devemos executar o seguinte SQL:

SELECT nome,telefone FROM `clientes` ORDER BY nome;

Você deve ter percebido que na sintaxe que eu passei, estou informando logo após o nome da coluna para botar ASC ou DESC, mas que não botei neste comando de exemplo. Realmente não botei pelo simples fato de, por padrão, o MySQL já realiza a consulta de forma crescente, mas que não atrapalha em nada você acrescentar o ASC no final do comando, ficando assim:

SELECT nome,telefone FROM `clientes` ORDER BY nome ASC;

O resultado seria esse:

Ana | 1111-1111
André | 3333-3333
Antônio | 2222-2222
Diego | 4444-4444
Diogo | 5555-5555
João | 8888-8888
José | 7777-7777
Maria | 6666-6666
...

Caso a gente queira fazer o inverso na ordenação dos dados, ou seja, fazer a consulta de forma decrescente (de Z até A), devemos utilizar o DESC:

SELECT nome,telefone FROM `clientes` ORDER BY nome DESC;

O resultado seria esse:

Maria
José
João
Diogo
Diego
Antônio
André
Ana
...

Agora que já aprendemos como ordenar uma coluna, vamos ver como faremos para ordenar duas delas.

Suponha que temos a seguinte tabela “FUNCIONÁRIOS”:

Queremos fazer uma consulta para pegar os nomes ordenados de forma crescente, mas separados por setor também de forma crescente pelo id_setor:

SELECT id_setor,nome FROM `funcionarios` ORDER BY `id_setor` ASC,`nome` ASC;

O resultado seria isso:

ID_SETOR | NOME
1 | Antônio
1 | Diego
1 | Marcelo
2 | Maria
2 | Maurício
2 | Ricardo
2 | Tiago
3 | João
3 | José
3 | Tânia
4 | Ana
4 | Antônio
5 | Josefa
5 | Victor

Caso você queira, pode alterar a ordem de cada coluna, elas não precisam ser necessariamente a mesma. Veja outros exemplos:

SELECT id_setor,nome FROM `funcionarios` ORDER BY `id_setor` ASC,`nome` DESC;
SELECT id_setor,nome FROM `funcionarios` ORDER BY `id_setor` DESC,`nome` DESC;
SELECT id_setor,nome FROM `funcionarios` ORDER BY `id_setor` DESC,`nome` ASC;

Espero que tenha sido útil e bem claro nas explicações. Um abraço. Não deixe de comentar e dar seu voto! 🙂

id_setor,nome

Sou bacharel em Sistemas de Informação pela Estácio de Sá (Alagoas), especialista em Gestão Estratégica da Tecnologia da Informação pela Univ. Gama Filho (UGF) e pós-graduando em Gestão da Segurança da Informação pela Univ. do Sul de Santa Catarina (UNISUL). Certificações que possuo: EC-Council CEH, CompTIA (Security+, CySA+ e Pentest+), EXIN (EHF e ISO 27001), MCSO, MCRM, ITIL v3. Tenho interesse por todas as áreas da informática, mas em especial em Gestão e Governança de TI, Segurança da Informação e Ethical Hacking.

Sair da versão mobile