Como Selecionar a n-ésima Linha
em uma Tabela de Banco de Dados SQL
Ao trabalhar com dados em um banco de dados, você pode se sentir na necessidade de selecionar um item específico, como a n-ésima linha
em uma tabela. No entanto, diferentes bancos de dados têm maneiras ligeiramente diferentes de alcançar isso, e aprender como fazê-lo em múltiplos sistemas SQL pode ser incrivelmente útil. Neste post do blog, vamos explorar tanto abordagens agnósticas de banco de dados quanto soluções específicas para bancos de dados SQL populares como SQL Server, MySQL, PostgreSQL, SQLite e Oracle.
Abordagem Agnóstica de Banco de Dados
Antes de mergulhar nas especificidades de cada banco de dados, vamos começar com um método que pode ser considerado mais universal. Embora alguns recursos possam não ser suportados em todas as plataformas SQL, existem estratégias gerais que tornam a seleção da n-ésima linha
mais simples.
Usando LIMIT e OFFSET (PostgreSQL e MySQL)
Para bancos de dados como PostgreSQL e MySQL, você pode utilizar a seguinte sintaxe SQL:
SELECT ... LIMIT y OFFSET x
- LIMIT especifica quantas linhas você deseja recuperar.
- OFFSET especifica de qual ponto você deseja começar a recuperar linhas.
Então, por exemplo, para selecionar a 10ª linha, você faria:
SELECT * FROM tablename LIMIT 1 OFFSET 9;
Essa sintaxe é útil para paginar dados ou, como no nosso caso, buscar uma linha específica.
Soluções Específicas de Banco de Dados
SQL Server
Com o SQL Server, especialmente em versões anteriores ao SQL Server 2012, você pode utilizar funções de janela para alcançar resultados similares. Aqui está como fazer isso usando um exemplo comum:
WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders
)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000;
- ROW_NUMBER() gera um número sequencial para linhas no conjunto de resultados com base na ordem especificada.
- Ajuste
WHERE RowNumber = 1000000
para especificar qual linha recuperar.
PostgreSQL e SQLite (Versão 3.25.0+)
Desde o PostgreSQL 8.4, as funções de janela padrão são suportadas, o que permite usar uma abordagem semelhante à do SQL Server:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns
FROM tablename
) AS foo
WHERE rownumber <= n;
- Substitua
n
pelo número da linha desejada. Esta estrutura ainda funcionará efetivamente no SQLite a partir da versão 3.25.0.
Oracle e DB2
Para Oracle e DB2, eles também suportam funções de janela. A sintaxe é semelhante à do PostgreSQL:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns
FROM tablename
) AS foo
WHERE rownumber <= n;
O uso de ROW_NUMBER()
garante que você possa acessar linhas específicas com base na ordenação que você define.
Conclusão
Selecionar a n-ésima linha
de um banco de dados SQL é uma tarefa comum que pode ser abordada de diversas maneiras, dependendo do banco de dados utilizado. Compreender as diferentes sintaxes e métodos permite que você trabalhe de forma mais eficaz em diferentes sistemas. Seja queryando no SQL Server, MySQL, PostgreSQL, SQLite ou Oracle, agora você tem as ferramentas necessárias para buscar as linhas exatas que precisa.
Para uma leitura adicional, você sempre pode conferir detalhes mais intrincados sobre técnicas de consulta SQL no site de Troels Arvin. Boas consultas!