Pular para o conteúdo principal

Como usar o SQL OFFSET

Domine a cláusula SQL OFFSET. Descubra como usar ORDER BY e LIMIT para retornar valores com base na posição, com exemplos práticos, incluindo paginação de dados para aplicativos da Web.
Actualizado 30 de jul. de 2024  · 10 min de leitura

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:

  1. Ignorar registros especificados ao analisar dados.
  2. Preparação de dados para exportação em blocos (quando usado em combinação com LIMIT).
  3. 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.

Temas

Aprenda SQL com a DataCamp

curso

Introduction to SQL

2 hr
881.8K
Learn how to create and query relational databases using SQL in just two hours.
Ver DetalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

tutorial

Exemplos e tutoriais de consultas SQL

Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre

Sejal Jaiswal

21 min

tutorial

Como usar GROUP BY e HAVING no SQL

Um guia intuitivo para você descobrir os dois comandos SQL mais populares para agregar linhas do seu conjunto de dados
Eugenia Anello's photo

Eugenia Anello

6 min

tutorial

Como usar um alias SQL para simplificar suas consultas

Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Allan Ouko's photo

Allan Ouko

9 min

tutorial

FUNÇÃO SQL COUNT()

COUNT() permite que você conte o número de linhas que correspondem a determinadas condições. Saiba como usá-lo neste tutorial.
Travis Tang 's photo

Travis Tang

3 min

tutorial

Tutorial do Insert Into SQL

A instrução "INSERT INTO" do SQL pode ser usada para adicionar linhas de dados a uma tabela no banco de dados.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

SELEÇÃO de várias colunas no SQL

Saiba como selecionar facilmente várias colunas de uma tabela de banco de dados em SQL ou selecionar todas as colunas de uma tabela em uma consulta simples.
DataCamp Team's photo

DataCamp Team

3 min

See MoreSee More