Voltar para a lista de artigos Artigos
8 minutos de leitura

O que significa ORDER BY 1 em SQL?

Você já viu a sintaxe "ORDER BY 1" em consultas SQL e se perguntou o que ela significa? Neste artigo, exploraremos essa sintaxe, esclareceremos sua finalidade e a tornaremos mais fácil de entender.

Se você é um usuário experiente de SQL ou está apenas começando a explorar essa linguagem, provavelmente já se deparou com a cláusula ORDER BY antes. No SQL, a cláusula ORDER BY é usada para classificar as linhas em uma tabela com base em uma ou mais colunas. Ela permite que você organize os dados em ordem crescente (A-Z, 1-10) ou decrescente (Z-A, 10-1) de acordo com critérios específicos.

Após a cláusula ORDER BY, você normalmente especifica a coluna pela qual deseja classificar os dados. No entanto, talvez você se surpreenda ao saber que também é possível utilizar a sintaxe como ORDER BY 1 em uma consulta SQL. A sintaxe para essa consulta é a seguinte:

SELECT column_name(s)
FROM table_name
ORDER BY 1;

Se você já viu esse tipo de código em consultas SQL e ficou confuso, não se preocupe! Ao final deste artigo, você entenderá exatamente como ele funciona e quando deve ser usado. E se precisar revisar a sintaxe do SQL enquanto estiver lendo o artigo, não hesite em consultar a nossa útil folha de dicasSQL para Iniciantes !

Para se tornar realmente bom em SQL, você deve praticá-lo. Se você quiser trabalhar com muitos problemas práticos, recomendamos que experimente nosso caminho Trilha de Práticas em SQL. Você aprenderá resolvendo problemas do mundo real, usando nosso editor de código on-line e conjuntos de dados reais. Esse caminho consiste em nove cursos e mais de 1.100 exercícios práticos para praticar.

Vamos ver ORDER BY 1 em ação!

Imagine que você tenha uma tabela chamada movie com as seguintes colunas:

  • id - O ID do filme, que também é a chave primária (PK) da tabela.
  • title - O título do filme.
  • length - A duração do filme em minutos.
  • director - O nome do diretor do filme.
  • year - O ano em que o filme foi lançado pela primeira vez.
  • rating - A classificação do filme (de 1 a 10).

Aqui você pode ver algumas linhas da tabela:

idtitlelengthdirectoryearrating
1The Secret Quest110David Anderson20227
2Lost in Time95Emily Roberts20196
3Starship Odyssey150Michael Turner20218
4The Enchanted Forest85Sarah Johnson20227
5Epic Journey130Mark Lewis20207
6Space Explorers115Lisa Adams20227
7Time Travelers100Paul Miller20216
8Mystic Island140Jessica White20238
9The Great Discovery105Robert Green20217
10Underwater120Mary Johnson20216

O que acontece se executarmos a consulta a seguir?

SELECT 
	title,
	length,
	director
FROM movie
ORDER BY 1;

Ao especificar ORDER BY 1, estamos instruindo o banco de dados a classificar os resultados com base na primeira coluna da lista SELECT, que, nesse caso, é title.

Isso significa que a consulta acima é equivalente a esta:

SELECT 
	title,
	length,
	director
FROM movie
ORDER BY title;

A primeira consulta é um pouco mais curta, mas pode ser mais difícil de entender. Na segunda consulta, você pode ver facilmente qual coluna é usada para classificação. Isso reduz a chance de cometer um erro.

Este é o resultado da nossa consulta:

titlelengthdirector
Epic Journey130Mark Lewis
Lost in Time95Emily Roberts
Mystic Island140Jessica White
Space Explorers115Lisa Adams
Starship Odyssey150Michael Turner
The Enchanted Forest85Sarah Johnson
The Great Discovery105Robert Green
The Secret Quest110David Anderson
Time Travelers100Paul Miller
Underwater120Mary Johnson

Se a ordem das colunas selecionadas fosse alterada, você teria que usar um número de coluna diferente:

SELECT
	director,
	title,
	length
FROM movie
ORDER BY 2;

Como você pode ver, o uso dessa sintaxe pode ser um pouco complicado.

Você sabia que pode usar uma sintaxe semelhante na cláusula GROUP BY? Confira nosso artigo sobre a sintaxe GROUP BY 1!

Ordem ascendente e descendente

Por padrão, a cláusula ORDER BY classifica os resultados do menor para o maior, ou seja, em ordem crescente. No entanto, às vezes você pode precisar classificar os dados em ordem decrescente. Você também pode fazer isso usando a sintaxe ORDER BY 1. Tudo o que você precisa fazer é adicionar a palavra-chave ASC ou DESC após 1.

Por exemplo, se você quiser recuperar a lista de filmes e classificá-la do mais longo para o mais curto, poderá executar uma consulta como esta:

SELECT
	title,
	length,
	director
FROM movie
ORDER BY 2 DESC;

A consulta acima é equivalente a:

SELECT
	title,
	length,
	director
FROM movie
ORDER BY length DESC;

E aqui está o resultado da nossa consulta:

titlelengthdirector
Starship Odyssey150Michael Turner
Mystic Island140Jessica White
Epic Journey130Mark Lewis
Underwater120Mary Johnson
Space Explorers115Lisa Adams
The Secret Quest110David Anderson
The Great Discovery105Robert Green
Time Travelers100Paul Miller
Lost in Time95Emily Roberts
The Enchanted Forest85Sarah Johnson

O que significa ORDER BY 1, 2, 3?

Em nosso exemplo anterior, classificamos os dados com base em apenas uma coluna. Agora, gostaríamos de ordenar nossas linhas com base em três colunas diferentes: year, rating, e title.

Para fazer isso, podemos usar a seguinte consulta:

SELECT
	year,
	rating,
	title
FROM movie
ORDER BY 1, 2, 3;

Quando você usa ORDER BY com várias colunas, o banco de dados primeiro classifica as linhas com base na primeira coluna especificada. Se houver valores duplicados na primeira coluna, o banco de dados classificará essas linhas ainda mais usando a segunda coluna especificada e assim por diante. Ao usar ORDER BY 1, 2, 3, estamos instruindo o banco de dados a classificar os resultados com base na primeira, segunda e terceira colunas da lista SELECT.

Isso é equivalente a executar a seguinte consulta:

SELECT
year,
rating,
title
FROM movie
ORDER BY year, rating, title;

Aqui está o que a consulta retorna:

yearratingtitle
20196Lost in Time
20207Epic Journey
20216Time Travelers
20216Underwater
20217The Great Discovery
20218Starship Odyssey
20227Space Explorers
20227The Enchanted Forest
20227The Secret Quest
20238Mystic Island

A consulta acima classificou os resultados em ordem crescente para todas as colunas. Bem, e se quiséssemos classificar os resultados por ano, do mais recente ao mais antigo, depois por classificação, do mais alto ao mais baixo, e, por fim, por título em ordem alfabética? Podemos fazer tudo isso escrevendo ASC ou DESC após cada coluna:

SELECT
	year,
	rating,
	title
FROM movie
ORDER BY 1 DESC, 2 DESC, 3 ASC;

O resultado dessa consulta é:

yearratingtitle
20238Mystic Island
20227Space Explorers
20227The Enchanted Forest
20227The Secret Quest
20218Starship Odyssey
20217The Great Discovery
20216Time Travelers
20216Underwater
20207Epic Journey
20196Lost in Time

Observe que os números das colunas na cláusula ORDER BY não precisam ser consecutivos. Você também pode escrever uma consulta como esta:

SELECT
	title,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, 1 ASC;

Agora, estamos instruindo o banco de dados a agrupar os resultados com base na segunda, terceira e primeira coluna da lista SELECT.

Também é possível misturar números e nomes de colunas em uma única cláusula ORDER BY:

SELECT
	title,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, title ASC;

Desta vez, estamos agrupando os resultados com base na segunda e terceira colunas da lista SELECT e na coluna title.

As consultas acima retornam o seguinte:

titleyearrating
Mystic Island20238
Space Explorers20227
The Enchanted Forest20227
The Secret Quest20227
Starship Odyssey20218
The Great Discovery20217
Time Travelers20216
Underwater20216
Epic Journey20207
Lost in Time20196

Cuidado: Não use a sintaxe ORDER BY 1

O uso da sintaxe ORDER BY 1 e ORDER BY 1, 2, 3 no SQL é geralmente considerado uma prática ruim porque torna as consultas mais difíceis de ler e manter. Embora possa economizar um pouco de digitação, ela também pode causar problemas inesperados.

O principal problema dessa abordagem é que ela se baseia na ordem das colunas em sua instrução SELECT em vez de especificar os nomes das colunas diretamente. Se a ordem das colunas for alterada ou se novas colunas forem adicionadas, os resultados da consulta poderão ser alterados de forma inesperada.

Por exemplo, digamos que você tenha usado a seguinte consulta para obter a lista de filmes classificados por ano, do mais recente ao mais antigo, depois por classificação, do mais alto ao mais baixo, e, por fim, por título em ordem alfabética:

SELECT
	title,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, 1 ASC;

Agora, imagine que também gostaríamos de exibir o nome do diretor em nossa lista. Podemos fazer isso modificando um pouco a consulta:

SELECT
	title,
	director,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, 1 ASC;

Mas quando executamos essa consulta, ela não nos dá a resposta certa! Este é o resultado que obtemos:

titledirectoryearrating
The Enchanted ForestSarah Johnson20227
The Great DiscoveryRobert Green20217
Time TravelersPaul Miller20216
Starship OdysseyMichael Turner20218
UnderwaterMary Johnson20216
Epic JourneyMark Lewis20207
Space ExplorersLisa Adams20227
Mystic IslandJessica White20238
Lost in TimeEmily Roberts20196
The Secret QuestDavid Anderson20227

Parece que as linhas não estão classificadas por year, rating e title como pretendido. Isso demonstra as possíveis armadilhas de confiar na ordem das colunas em vez de especificar os nomes das colunas diretamente na cláusula ORDER BY. Você consegue identificar o erro em nossa consulta modificada?

O resultado está incorreto porque tentamos classificar nossas linhas pelas colunas director, year e title em vez de ano, classificação e título.

A consulta correta seria a seguinte:

SELECT
	title,
	director,
	year,
	rating
FROM movie
ORDER BY 3 DESC, 4 DESC, 1 ASC;

Mas podemos evitar esse erro simplesmente usando a cláusula ORDER BY com os nomes completos das colunas:

SELECT
	title,
	director,
	year,
	rating
FROM movie
ORDER BY year DESC, rating DESC, title ASC;

Agora, mesmo que decidamos alterar ou mover colunas na instrução SELECT, não precisaremos nos preocupar com a parte ORDER BY.

Como você pode ver, é melhor mencionar explicitamente os nomes das colunas pelas quais você deseja classificar na cláusula ORDER BY. Isso facilita a leitura de sua consulta e reduz a probabilidade de erros.

O truque ORDER BY 1 é bom quando você está apenas olhando os dados por conta própria e quer acelerar a digitação. Mas se você planeja reutilizar a consulta de alguma forma, é melhor usar a sintaxe completa com nomes de colunas.

Curioso para saber mais sobre ORDER BY 1?

Isso é tudo o que temos para hoje! Se quiser saber mais sobre como usar a cláusula ORDER BY, dê uma olhada em nossos artigos para saber como usar o ORDER BY em detalhes e veja alguns exemplos reais de uso do ORDER BY.

E para obter mais prática, lembre-se de conferir nossa trilha Trilha de Práticas em SQL!