Paginação de resultados com SQL

Paginação de resultados com SQL

Um recurso muito comum ao trabalhar com grandes quantidades de registros é fazer a paginação dos resultados. Vamos ver exemplos de como fazer paginação de resultados com SQL utilizando o MySQL e o SQL Server.

Vamos começar pelo MySQL. No MySQL você pode limitar a quantidade de registros da seguinte forma:

 

SELECT * from minha_tabela LIMIT 10;

 

A consulta exibida acima retornaria os 10 primeiros registros. Para fazer a paginação, o LIMIT possui outra forma de utilização.

 

SELECT * from minha_tabela LIMIT posicao_inicial, qtde_registros;

 

Se por exemplo a tabela tiver 50 linhas e você desejar ver os registros da posição 30 até a 40, a consulta ficaria da seguinte forma:

 

SELECT * from minha_tabela LIMIT 30, 10;

 

Outra forma de chegar no mesmo resultado seria fazer o seguinte:

 

SELECT * FROM minha_tabela LIMIT 10 OFFSET 29

 

Perceba que o OFFSET recebeu como parâmetro o número da posição anterior que vamos tomar como refêrencia. Como queremos a partir da posição 30, ele recebeu como ponto de partida a posição 29.


No SQL Server os comandos são diferentes. Para listar os 10 primeiros registros, a consulta seria assim:

 

SELECT TOP 10 * from minha_tabela

 

Para fazer a paginação, a partir do SQL Server 2005 seria possível fazer utilizando ROW_NUMBER(). Se por exemplo desejamos retornar 10 registros a partir da posição 30, podemos fazer desta forma:

 

SELECT *

FROM (

    SELECT [nome_do_campo], ROW_NUMBER() OVER(ORDER BY [nome_do_campo]) AS Ranking

    FROM minha_tabela

) A

WHERE 

    A.Ranking >= 30

    AND A.Ranking < 40

 

Neste exemplo, criamos um campo chamado Ranking utilizando o ROW_COUNT. Com base nos resultados desta consulta, fizemos um filtro com base no conteúdo deste campo. Uma outra forma de chegar no mesmo resultado é utilizando o operador BETWEEN

SELECT *

FROM (

    SELECT [nome_do_campo], ROW_NUMBER() OVER(ORDER BY [nome_do_campo]) AS Ranking

    FROM minha_tabela

) A

WHERE 

    A.Ranking BETWEEN 30 AND 40

 

A partir do SQL Server 2012, existem dois novos recurso que podem simplificar este trabalho, que são OFFSET e FETCH.

 

SELECT coluna1, coluna2, coluna3

FROM minha_tabela

ORDER BY coluna1

OFFSET 30 ROWS

FETCH NEXT 10 ROWS ONLY

 

Neste exemplo, utilizamos o OFFSET para definir a posição inicial, que vai ser a posição 30. O parâmetro FECTH informa que desejamos o retorno de 10 registros, então a consulta vai retornar os registros da posição 30 até a posição 40.

 

Outros conteudos que podem ser de seu interesse

Criando um log utilizando gatilhos no SQL
05/06/2022SQL

Criando um log utilizando gatilhos no SQL

Um exemplo de como registrar alterações em tabelas usando triggers no SQL

Saiba mais...
Inserir valores em campos do tipo autonumeração no SQL Server
26/09/2019SQL

Inserir valores em campos do tipo autonumeração no SQL Server

Aprenda como inserir valores em campos de autonumeração no SQL Server

Saiba mais...

Conteúdo sobre banco de dados sem complicação!