Curso
Saiba como usar a cláusula SQL OFFSET
com as cláusulas ORDER BY
e LIMIT
para retornar valores com base em sua posição nos resultados da consulta. Explore um caso de uso específico com paginação para aplicativos da Web.
O SQL OFFSET
é uma cláusula poderosa usada para ignorar um número específico de linhas em um resultado de consulta. Geralmente, ela é combinada com a cláusula LIMIT
para paginação de dados. Aprenda os conceitos básicos de SQL em nossos cursos Introduction to SQL e Learn SQL. Este tutorial explora o funcionamento do OFFSET
, seus aplicativos práticos e as práticas recomendadas para otimizar suas consultas SQL. Se você quiser revisar as operações de SQL antes de começarmos, dê uma olhada rápida na nossa Folha de consulta básica de SQL.
A resposta rápida: Como usar o SQL OFFSET
A cláusula OFFSET
no SQL é usada para ignorar um número específico de linhas antes de retornar as linhas no conjunto de resultados. É frequentemente usado em combinação com a cláusula LIMIT para paginar os resultados.
SELECT column_names
FROM table_name
ORDER BY column_name
LIMIT number_of_rows OFFSET offset_value;
Na consulta SQL acima, o number_of_rows
indica o número específico de linhas a serem retornadas, enquanto o offset_value
mostra o número de linhas que a consulta deve ignorar antes de retorná-las.
Como o OFFSET funciona
A cláusula OFFSET
ignora o número especificado de linhas no conjunto de resultados. Quando usado com ORDER BY
, ele garante resultados consistentes ao ignorar linhas em uma ordem definida, geralmente especificada por um nome de coluna. Por padrão, o site ORDER BY
retorna a coluna especificada em ordem crescente.
Suponha que você queira consultar em uma tabela employees
as seguintes colunas: employee_id
, first_name
, last_name
, phone_number
, e salary
. Você também deseja excluir as primeiras 9 linhas dos resultados. Você usará a consulta SQL abaixo.
-- Select all columns for employees, starting from the 10th row
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9 ROWS;
É importante lembrar que, devido às colunas de classificação não exclusivas, é preciso tomar cuidado para evitar registros duplicados.
Combinação de LIMIT e OFFSET
OFFSET
é normalmente usado com LIMIT
para controlar o número de linhas retornadas e onde começar a retornar as linhas.
No exemplo abaixo, a cláusula LIMIT
retorna apenas as próximas 10 linhas depois de ignorar as primeiras 9 linhas.
-- Select all columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9
-- Fetch the next 10 rows
LIMIT 10;
Aplicações práticas do OFFSET
O SQL OFFSET
é amplamente usado para paginação em aplicativos da Web. A paginação de dados, para ser mais claro, é uma técnica para dividir grandes dados em partes menores, o que ajuda os usuários a navegar em grandes conjuntos de dados de forma eficiente.
Considero a paginação de dados um dos melhores exemplos de uso de OFFSET
e LIMIT
. Nessa técnica, as cláusulas OFFSET
e LIMIT
usadas juntas dividem os dados em partes gerenciáveis exibidas em várias páginas.
Isso melhora a experiência do usuário porque ninguém fica sobrecarregado ao ver uma lista enorme de uma só vez.
Outras aplicações do OFFSET
incluem:
- Ignorar registros especificados ao analisar dados.
- Preparação de dados para exportação em blocos (quando usado em combinação com
LIMIT
). - Basta concentrar-se nos dados em um intervalo específico, quando você sabe o que está procurando.
Suporte e alternativas específicas do banco de dados
Diferentes bancos de dados suportam as cláusulas OFFSET
e LIMIT
, incluindo MySQL, PostgreSQL e SQLite. Métodos alternativos, como FETCH
, podem ser usados em bancos de dados que não suportam instruções OFFSET
e LIMIT
, como o SQL Server.
Por exemplo, a consulta abaixo (usando LIMIT
) retornaria valores nos bancos de dados MySQL, SQLite e PostgreSQL, mas não no SQL Server.
-- Select all columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9
-- Fetch the next 10 rows
LIMIT 10;
Portanto, você deve usar FETCH
no SQL Server para retornar resultados semelhantes usando a consulta abaixo;
-- Select specific columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows (starting from the 10th row)
OFFSET 9 ROWS
-- Fetch the next 10 rows
FETCH NEXT 10 ROWS ONLY;
Técnicas avançadas: OFFSET e FETCH
A cláusula FETCH
, usada no padrão SQL, pode ser uma alternativa avançada para LIMIT
. Enquanto OFFSET
especifica o número de linhas a serem ignoradas, FETCH
fornece o número de linhas a serem retornadas da consulta.
-- Selecting columns from employees table
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Ordering the result set by employee_id for consistent pagination
ORDER BY employee_id
-- Skipping the first 20 rows in the result set
OFFSET 20 ROWS
-- Fetching the next 10 rows only after the offset
FETCH NEXT 10 ROWS ONLY;
Outras técnicas avançadas de SQL podem ser encontradas em nosso curso Associate Data Analyst in SQL.
Considerações sobre desempenho e outras práticas recomendadas
Para usar o OFFSET
de forma eficaz, você precisa entender seu impacto no desempenho da consulta.
OFFSET
pode afetar o desempenho da consulta, especialmente com grandes conjuntos de dados. O SQL Server lida com o cache e a execução de consultas de forma eficiente, mas o uso do site OFFSET
com grandes conjuntos de dados pode exigir estratégias de otimização adicionais, como o uso de CTEs (Common Table Expressions) ou tabelas temporárias. Portanto, você deve monitorar o desempenho da consulta para identificar problemas e solucionar gargalos que impedem a execução da consulta. No curso Intermediate SQL Server da DataCamp, você encontrará um capítulo sobre expressões de tabela comuns e outros tópicos avançados.
Aqui estão algumas práticas recomendadas adicionais que descobri durante minha prática.
- Sempre use uma cláusula
ORDER BY
apropriada. Essa abordagem garante que os registros sejam classificados de forma consistente. - Considere técnicas de indexação e otimização de consultas. Esse método garante um desempenho otimizado, especialmente ao lidar com grandes bancos de dados.
Conclusão e aprendizado adicional
O domínio da cláusula OFFSET
, que é combinada com LIMIT
, é fundamental para o gerenciamento eficiente dos dados. Experimente usar essas cláusulas em suas consultas SQL para melhorar o desempenho e aprimorar a experiência do usuário. Você pode saber mais sobre a cláusula OFFSET
em SQL fazendo os cursos SQL Intermediário e Fundamentos de SQL da DataCamp.
Da mesma forma, você pode aprender mais sobre análise de dados usando SQL com nosso curso Reporting in SQL. Além disso, se você quiser demonstrar suas habilidades práticas com projetos SQL, recomendo que obtenha a Certificação SQL Associate para ajudá-lo a se destacar nas entrevistas de emprego.
Perguntas frequentes
O que é a cláusula OFFSET no SQL?
A cláusula OFFSET
é usada para ignorar linhas antes de retornar os resultados em uma consulta.
Por que usamos ORDER BY com OFFSET?
Embora nossa consulta seja executada sem a cláusula ORDER BY
, o resultado pode não ser consistente ou não corresponder ao esperado. Usar OFFSET
sem ORDER BY
significa que o mecanismo do banco de dados não tem uma ordem especificada a seguir, o que pode levar a resultados imprevisíveis, portanto, usamos ORDER BY
para não sermos surpreendidos.
Por que a cláusula LIMIT retorna um erro no SQL Server?
A cláusula LIMIT
é compatível com MySQL, PostgreSQL e SQLite. Use FETCH
para o SQL Server.
Qual é a diferença entre OFFSET e LIMIT?
A cláusula OFFSET
ignora as linhas especificadas antes de retornar os registros, enquanto a cláusula LIMIT
restringe o número de registros a serem retornados.
O que acontecerá se minha consulta OFFSET demorar para ser executada?
Você pode otimizar a consulta usando CTEs (Common Table Expressions) ou tabelas temporárias.