Paginação de resultados com SQL

Como paginar resultados usando bancos de dados MySQL e SQL Server

 

Um recurso muito comum ao trabalhar com grandes quantidades de registros é fazer a paginação dos resultados. Vamos ver exemplos de como fazer isso 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 operator 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.

 

Quer conferir mais dicas sobre banco de dados? Clique aqui e veja mais dicas!
BINS - Blog SQL

 

Veja outros conteúdos que podem ser de seu interesse