28th Nov 2023 8 minutos de leitura O que significa ORDER BY 1 em SQL? Dominika Florczykowska sql ORDER BY Índice Vamos ver ORDER BY 1 em ação! Ordem ascendente e descendente O que significa ORDER BY 1, 2, 3? Cuidado: Não use a sintaxe ORDER BY 1 Curioso para saber mais sobre ORDER BY 1? 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! Tags: sql ORDER BY