Resumo : neste tutorial, você aprenderá como classificar um conjunto de resultados de uma consulta usando a ORDER BY
cláusula SQLite.
ORDER BY
Introdução à cláusula SQLite
SQLite armazena dados nas tabelas em uma ordem não especificada. Isso significa que as linhas da tabela podem ou não estar na ordem em que foram inseridas.
Se você usar a SELECT
instrução para consultar dados de uma tabela, a ordem das linhas no conjunto de resultados não será especificada.
Para classificar o conjunto de resultados, adicione a ORDER BY
cláusula à SELECT
instrução da seguinte maneira:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A ORDER BY
cláusula vem depois da FROM
cláusula. Ele permite classificar o conjunto de resultados com base em uma ou mais colunas em ordem crescente ou decrescente.
Nesta sintaxe, você coloca o nome da coluna pela qual deseja classificar após a ORDER BY
cláusula seguida pela palavra-chave ASC
ou DESC
.
- A
ASC
palavra-chave significa ascendente. - E a
DESC
palavra-chave significa descendente.
Se você não especificar a palavra-chave ASC
ou DESC
, o SQLite classificará o conjunto de resultados usando a ASC
opção. Em outras palavras, ele classifica o conjunto de resultados em ordem crescente por padrão.
Caso queira classificar o conjunto de resultados por múltiplas colunas, use uma vírgula (,) para separar duas colunas. A ORDER BY
cláusula classifica as linhas usando colunas ou expressões da esquerda para a direita. Em outras palavras, a ORDER BY
cláusula classifica as linhas usando a primeira coluna da lista. Em seguida, ele classifica as linhas classificadas usando a segunda coluna e assim por diante.
Você pode classificar o conjunto de resultados usando uma coluna que não aparece na lista de seleção da SELECT
cláusula.
ORDER BY
Exemplo de cláusula SQLite
Vamos pegar a tracks
tabela do banco de dados de exemplo para demonstração.
Suponha que você queira obter dados das colunas de nome, milissegundos e ID do álbum, use a seguinte instrução:
SELECT
name,
milliseconds,
albumid
FROM
tracks;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A SELECT
instrução que não usa ORDER BY
a cláusula retorna um conjunto de resultados que não está em nenhuma ordem.
Suponha que você queira classificar o conjunto de resultados com base na AlbumId
coluna em ordem crescente. Use a seguinte instrução:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O conjunto de resultados agora é classificado pela AlbumId
coluna em ordem crescente, conforme mostrado na captura de tela.
O SQLite usa ASC
por padrão, então você pode omiti-lo na instrução acima da seguinte forma:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid;
Suponha que você queira classificar o resultado classificado (por AlbumId
) acima pela Milliseconds
coluna em ordem decrescente. Nesse caso, você precisa adicionar a Milliseconds
coluna à ORDER BY
cláusula da seguinte forma:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC,
milliseconds DESC;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O SQLite classifica AlbumId
primeiro as linhas por coluna em ordem crescente. Em seguida, ele classifica o resultado classificado definido pela Milliseconds
coluna em ordem decrescente.
Se você olhar as faixas do álbum com AlbumId
1, descobrirá que a ordem das faixas muda entre as duas afirmações.
SQLite ORDER BY
com a posição da coluna
Em vez de especificar os nomes das colunas, você pode usar a posição da coluna na ORDER BY
cláusula.
Por exemplo, a instrução a seguir classifica as faixas por albumid
(3ª coluna) e milliseconds
(2ª coluna) em ordem crescente.
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
3,2;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Os números 3 e 2 referem-se a AlbumId
e Milliseconds
na lista de colunas que aparece na SELECT
cláusula.
Classificando NULLs
No mundo dos bancos de dados, NULL é especial. Denota que as informações faltantes ou os dados não são aplicáveis.
Suponha que você queira armazenar a data de aniversário de um artista em uma tabela. Na hora de salvar o disco do artista, você não tem a informação de aniversário.
Para representar as informações de aniversário desconhecidas no banco de dados, você pode usar uma data especial 01.01.1900
ou uma ''
string vazia. No entanto, ambos os valores não mostram claramente que o aniversário é desconhecido.
NULL foi inventado para resolver esse problema. Em vez de usar um valor especial para indicar que a informação está faltando, é usado NULL.
NULL é especial porque você não pode compará-lo com outro valor. Simplificando, se as duas informações forem desconhecidas, você não poderá compará-las.
NULL é par e não pode ser comparado consigo mesmo; NULL não é igual a si mesmo, então NULL = NULL
sempre resulta em falso.
Quando se trata de classificação, o SQLite considera NULL menor que qualquer outro valor.
Isso significa que NULLs aparecerão no início do conjunto de resultados se você usar ASC ou no final do conjunto de resultados quando usar DESC.
SQLite 3.30.0 adicionou as opções NULLS FIRST
e NULLS LAST
à ORDER BY
cláusula. A NULLS FIRST
opção especifica que os NULLs aparecerão no início do conjunto de resultados enquanto a NULLS LAST
opção coloca NULLs no final do conjunto de resultados.
O exemplo a seguir usa a ORDER BY
cláusula para classificar faixas por compositores:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Primeiro, você vê que NULLs aparecem no início do conjunto de resultados porque o SQLite os trata como os valores mais baixos. Ao rolar para baixo o resultado, você verá outros valores:
O exemplo a seguir usa a NULLS LAST
opção de colocar NULLs após outros valores:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer NULLS LAST;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Se você rolar a saída, verá que os NULLs são colocados no final do conjunto de resultados:
Neste tutorial, você aprendeu como usar a ORDER BY
cláusula SQLite para classificar o conjunto de resultados usando uma única coluna, múltiplas colunas em ordem crescente e decrescente.