1. Introdução
MySQL é um banco de dados relacional amplamente usado para aplicações web e gerenciamento de bancos de dados. Entre suas muitas funcionalidades, a cláusula ORDER BY é uma ferramenta essencial para organizar os dados recuperados com base em critérios específicos. Neste artigo, explicaremos o básico da cláusula ORDER BY, ordenação por múltiplas colunas, tratamento de valores NULL e otimização de desempenho. Para facilitar a compreensão, incluiremos exemplos concretos e tabelas visuais.
2. Sintaxe Básica da Cláusula ORDER BY
A cláusula ORDER BY é usada para ordenar os dados recuperados de um banco de dados em ordem ascendente (ASC) ou descendente (DESC). Ao especificar a coluna alvo da ordenação, você pode apresentar os dados de forma mais organizada.
Sintaxe Básica
SELECT * FROM table_name
ORDER BY column_name ASC | DESC;
- Ascendente (ASC) : Ordena os valores do menor para o maior. Se nenhuma palavra‑chave for especificada,
ASCé o padrão. - Descendente (DESC) : Ordena os valores do maior para o menor.
Exemplo
A consulta a seguir ordena os dados de clientes por idade em ordem ascendente:
SELECT * FROM customers
ORDER BY age ASC;
Figura 1: Dados do cliente antes da ordenação
Name | Age | Endereço |
|---|---|---|
Yamada | 40 | Tóquio |
Sato | 25 | Osaka |
Suzuki | 35 | Nagoya |
Figura 2: Dados do cliente após a ordenação
Name | Age | Endereço |
|---|---|---|
Sato | 25 | Osaka |
Suzuki | 35 | Nagoya |
Yamada | 40 | Tóquio |
Observação Importante
A cláusula ORDER BY deve aparecer ao final de uma instrução SELECT. Se outras cláusulas como WHERE ou GROUP BY forem usadas, ORDER BY vem depois delas.

3. Ordenação por Múltiplas Colunas
A cláusula ORDER BY permite ordenar por várias colunas, possibilitando uma organização mais detalhada. Por exemplo, se duas linhas compartilham o mesmo valor na primeira coluna, a segunda coluna é usada como critério de desempate.
Exemplo de Sintaxe
SELECT * FROM table_name
ORDER BY column1 ASC, column2 DESC;
Exemplo Prático
A a seguir ordena os clientes por endereço em ordem descendente e, em seguida, por idade em ordem ascendente:
SELECT * FROM customers
ORDER BY address DESC, age ASC;
Figura 3: Resultado da ordenação por múltiplas colunas
Name | Address | Age |
|---|---|---|
Yamada | Tokyo | 40 |
Sato | Osaka | 25 |
Suzuki | Nagoya | 35 |
Dessa forma, os dados são primeiro ordenados por address em ordem descendente. Se vários clientes compartilharem o mesmo endereço, eles são ordenados por age em ordem ascendente.
4. Tratamento de Valores NULL
No SQL, um valor NULL significa “nenhum existe”. Ao usar a cláusula ORDER BY, os valores NULL são tratados de forma especial. Com ASC, os valores NULL aparecem primeiro, enquanto com DESC aparecem por último.
Comportamento do Valor NULL
- Ascendente (ASC) : Os valores
NULLsão mostrados primeiro. - Descendente (DESC) : Os valores
NULLsão mostrados por último.
Exemplo
A consulta a seguir exibe os produtos com preços NULL primeiro, seguidos pelos demais em ordem ascendente:
SELECT * FROM products
ORDER BY price ASC;
Figura 4: Resultados da ordenação com valores NULL
Produto | Preço |
|---|---|
Produto A | NULL |
Produto B | 1000 |
Produto C | 2000 |
Como Exibir Valores NULL por ÚltimoSe você quiser que os valores NULL apareçam por último, pode usar a função ISNULL().
SELECT * FROM products
ORDER BY ISNULL(price), price ASC;

5. Combinando ORDER BY com WHERE
Ao combinar a cláusula WHERE com ORDER BY, você pode filtrar registros que atendam a condições específicas e, em seguida, ordená‑los. Isso ajuda a organizar e exibir os dados de forma mais eficiente.
Sintaxe Básica
SELECT * FROM table_name
WHERE condition
ORDER BY column_name ASC | DESC;
Exemplo
A consulta a seguir seleciona clientes com idade igual ou superior a 30 anos e os ordena por nome em ordem ascendente:
SELECT * FROM customers
WHERE age >= 30
ORDER BY name ASC;
Essa consulta filtra os dados primeiro e, depois, aplica a ordenação.
6. Usando ORDER BY com GROUP BY
A cláusula GROUP BY agrupa os dados por uma coluna específica, e a cláusula ORDER BY pode então ser usada para ordenar os resultados agrupados.
Exemplo
A consulta a seguir conta os clientes por região e ordena o resultado em ordem descendente:
SELECT region, COUNT(*)
FROM customers
GROUP BY region
ORDER BY COUNT(*) DESC;
Figura 5: Resultados de agregação ordenados
Region | Contagem de Clientes |
|---|---|
Tóquio | 50 |
Osaka | 30 |
Nagoya | 20 |

7. ORDER BY Avançado: Ordenação de Datas e Strings
A cláusula ORDER BY também pode ordenar colunas de data e string. Por exemplo, é útil para exibir os registros mais recentes primeiro ou ordenar alfabeticamente.
Ordenação por Data
SELECT * FROM orders
ORDER BY order_date DESC;
Esta consulta exibe os pedidos mais recentes primeiro.
Ordenação por Strings
A consulta a seguir ordena os nomes dos funcionários alfabeticamente:
SELECT * FROM employees
ORDER BY name ASC;
8. Otimização de Desempenho para ORDER BY
A ordenação de grandes conjuntos de dados pode afetar o desempenho. Aqui estão técnicas para otimizar consultas que usam ORDER BY.
Usando Índices
Adicionar um índice à coluna que está sendo ordenada pode melhorar o desempenho da consulta:
CREATE INDEX idx_column_name ON table_name(column_name);
Usando LIMIT com ORDER BY
A cláusula LIMIT restringe o número de linhas retornadas após a ordenação, reduzindo o tempo de execução e os custos de processamento:
SELECT * FROM customers
ORDER BY age ASC
LIMIT 10;
Lidando com Grandes Conjuntos de Dados
Para conjuntos de dados muito grandes, ajustar as configurações do MySQL pode melhorar o desempenho. Por exemplo, aumentar o sort_buffer_size permite que mais memória seja usada para ordenação:
SET GLOBAL sort_buffer_size = 2M;
Também é importante usar EXPLAIN para revisar o plano de execução da consulta e identificar oportunidades de otimização:
EXPLAIN SELECT * FROM customers ORDER BY age ASC;

9. Resumo
Neste artigo, cobrimos a cláusula ORDER BY do MySQL desde os conceitos básicos até casos de uso avançados. A cláusula ORDER BY é crucial para organizar dados e pode lidar com ordem ascendente/descendente, ordenação de múltiplas colunas e casos especiais como valores NULL.
Também discutimos otimização de desempenho, incluindo o uso de índices, LIMIT e ajuste do sort_buffer_size para lidar com grandes conjuntos de dados de forma mais eficiente.
Ao dominar a cláusula ORDER BY, você pode ordenar dados de forma eficaz e melhorar o desempenho de aplicativos e bancos de dados. Certifique-se de aplicar essas técnicas em projetos do mundo real.
Casos de Uso Práticos para ORDER BY
Aqui estão alguns cenários comuns onde o ORDER BY é essencial na prática:
- Gerando Relatórios : Por exemplo, ao criar relatórios de vendas, você pode ordenar produtos por receita ou listar o desempenho de vendas regionais em ordem.
- Implementando Paginação : Em aplicativos web, você pode usar
ORDER BYcomLIMITpara exibir dados ordenados em várias páginas de forma eficiente. - Limpeza de Banco de Dados : Ao excluir registros antigos ou recuperar entradas específicas para manutenção, o
ORDER BYfacilita a identificação e gerenciamento dos dados corretos.
Estes são casos de uso comuns do dia a dia onde a cláusula ORDER BY pode melhorar significativamente a organização de dados e a eficiência do fluxo de trabalho.


