Deixa eu te perguntar: o que você faz quando encontra muitos produtos numa página de loja online? Isso aí, clica pra próxima página. Mas o que rola por trás dos panos? É a mágica do SQL — usando o comando OFFSET pra pular linhas. Hoje tu vai aprender o que é OFFSET, pra que serve, como usar e por que ele é a base da paginação de dados.
OFFSET é uma palavra-chave do SQL que deixa você pular uma quantidade definida de linhas no resultado da query. Tipo folhear um livro: dá pra "pular" as 10 primeiras linhas e começar a ver a partir da 11ª.
Sintaxe
SELECT coluna1, coluna2
FROM tabela
OFFSET quantidade_de_linhas;
OFFSET— palavra-chave pra pular linhas.- quantidade_de_linhas — quantas linhas você quer pular.
Exemplo simples de uso do OFFSET
Imagina que temos uma tabela students com esses dados:
| id | name | age |
|---|---|---|
| 1 | Alysa | 22 |
| 2 | Bob | 24 |
| 3 | Klara | 23 |
| 4 | Dan | 21 |
| 5 | Eva | 25 |
Queremos mostrar todos os estudantes a partir do terceiro. Pra isso, usamos essa query:
SELECT *
FROM students
OFFSET 2;
Resultado:
| id | name | age |
|---|---|---|
| 3 | Klara | 23 |
| 4 | Dan | 21 |
| 5 | Eva | 25 |
O SQL "pulou" as duas primeiras linhas (Alysa e Bob) e mostrou o resultado a partir da terceira. Tipo usar marcador de página: "essa página já li, bora pra próxima".
Combinando OFFSET com LIMIT
OFFSET normalmente é usado junto com LIMIT. Assim dá pra pular linhas e limitar o resultado ao número de registros que você quer. Isso é muito útil pra paginação (page = página) — mostrar dados em partes, algumas linhas por vez.
Imagina que queremos mostrar 2 registros por vez e começar do terceiro. A query fica assim:
SELECT *
FROM students
LIMIT 2
OFFSET 2;
Resultado:
| id | name | age |
|---|---|---|
| 3 | Klara | 23 |
| 4 | Dan | 21 |
Lógica do rolê:
OFFSET 2pula as duas primeiras linhas: Alysa e Bob.LIMIT 2pega só duas linhas das que sobraram.
Montando paginação
Agora vem a parte mais massa — montar a paginação. Imagina que você tá fazendo um app web com lista de estudantes. Em cada página você quer mostrar 2 registros. Como faz?
A lógica é:
- Primeira página não pula nada:
OFFSET 0. - Segunda página pula 2 linhas:
OFFSET 2. - Terceira página pula 4 linhas:
OFFSET 4. - E assim vai...
Exemplo: mostra a segunda página
Na primeira página aparecem os registros 1 e 2 (Alysa e Bob). Na segunda — registros 3 e 4 (Klara e Dan).
SELECT *
FROM students
ORDER BY id
LIMIT 2
OFFSET 2;
Resultado:
| id | name | age |
|---|---|---|
| 3 | Klara | 23 |
| 4 | Dan | 21 |
Exemplo: mostra a terceira página
Na terceira página — registros 5 e 6 (se existirem).
SELECT *
FROM students
ORDER BY id
LIMIT 2
OFFSET 4;
Resultado:
| id | name | age |
|---|---|---|
| 5 | Eva | 25 |
Fórmula pra calcular o OFFSET
Pra automatizar a paginação, usa essa fórmula:
OFFSET = (numero_da_pagina - 1) * quantidade_de_registros_por_pagina
Por exemplo:
- Pra primeira página:
(1 - 1) * 2 = 0. - Pra segunda página:
(2 - 1) * 2 = 2. - Pra terceira página:
(3 - 1) * 2 = 4.
Dicas importantes de performance
Quando você mexe com tabelas grandes, usar OFFSET pode ficar lento, principalmente nas páginas mais pra frente. Isso porque o PostgreSQL ainda lê todas as linhas que foram puladas. Por exemplo, uma query com OFFSET 10000 faz o banco passar pelas 10.000 primeiras linhas antes de mostrar o resultado. Nesses casos, vale pensar em alternativas, tipo usar um identificador único como marcador de paginação.
Alternativa: paginação usando cursor
Pra otimizar, dá pra usar o esquema de "cursor". Em vez de pular linhas com OFFSET, você guarda o id da última linha mostrada na página anterior e usa ele pra montar a próxima query:
SELECT *
FROM students
WHERE id > ultimo_id_mostrado
ORDER BY id
LIMIT 2;
Esse jeito pode deixar a consulta bem mais rápida em tabelas grandes.
Paginação na prática
Paginação é usada na maioria dos apps web: lojas online, blogs, painéis de admin. Por exemplo:
- Mostrar lista de produtos numa loja online;
- Exibir lista de usuários num sistema CRM;
- Mostrar feed de notícias por páginas.
Também pode ser útil quando você tá analisando muitos dados, pra trabalhar com pedaços menores.
Erros comuns usando OFFSET
Usar OFFSET às vezes confunde, principalmente pra quem tá começando. Olha só os erros mais comuns:
Faltou ordenar. Se você não colocar ORDER BY, a ordem das linhas no resultado do OFFSET pode ser aleatória.
Query errada:
SELECT * FROM students
OFFSET 5;
Query certa:
SELECT * FROM students
ORDER BY id
OFFSET 5;
Valor errado de OFFSET. Se colocar um valor muito alto, o resultado vai ser vazio.
Problemas de performance. Como já falamos, usar OFFSET grande nas páginas finais pode ser bem lento.
Faltou filtro. Se você usar OFFSET e LIMIT sem filtrar (WHERE), pode acabar pegando dados desnecessários, o que piora a performance.
Ordem dos operadores. A ordem dos operadores no SQL é fixa: primeiro LIMIT, depois OFFSET. Pode omitir algum, mas não pode trocar a ordem.
GO TO FULL VERSION