post icon

Realizar Consultas Paginadas en SQL Server, MySQL, Oracle & PostgreSQL

Paginar nuestras consultas resulta que siempre aligera más la carga del motor de base de datos, siempre y cuando éste tenga los índices donde corresponden y no en cualquier columna o peor aun, no tener indices, ya que sólo se transmiten los datos a mostrarse en el momento, ésta característica se siente mucho mejor cuando estamos trabajando con aplicaciones web, u otras que corran sobre una red de baja velocidad o alta concurrencia. De ahí su gran implementación en los últimos tiempos.

Para lograrlo necesitamos de la ayuda de nuestro motor de base de datos, ésta vez veremos el ejemplo en 4 motores muy populares, SQL Server, Oracle, MySQL y PostgreSQL. Personalmente creo que es más sencillo implementarlo en MySQL y PostgreSQL, seguido de Oracle y SQL Server. Aunque esto no hace que sea difícil en los últimos, sino más bien no tienen una sintaxis especifica para ésta función como lo tienen MySQL y PostgreSQL.

MySQL y PostgreSQL

1
2
-- devuelve los primeros 10 registros
SELECT * FROM TABLA LIMIT 10
1
2
-- devuelve los primeros 10 registros a partir del 40° registro
SELECT * FROM TABLA LIMIT 40, 10

ORACLE

1
2
3
-- devuelve los registros del 40° al 49° semejante al de MySQL
SELECT * FROM ( SELECT TABLA.* , ROWNUM AS FILAS FROM TABLA )
WHERE FILAS BETWEEN 40 AND 49

SQL SERVER 2000

1
2
3
4
-- devuelve los registros 40° al 49°, el primer top indica cuantos registros y el segundo del subquery debe ser la cantidad deseada * la pagina -1
SELECT TOP 10 T.* FROM TABLA AS T WHERE T.ID NOT IN
( SELECT TOP 39 id from tabla order by id desc )
ORDER BY T.ID DESC

SQL SERVER 2005/2008

1
2
-- Ésta consulta también devuelve las filas 40° al 49° encontradas
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY ID) AS FILA FROM TABLA ) AS ALIAS WHERE FILA > 40 AND FILA <= 49

Comentarios desde Facebook:

  1. avatar
    MarCraft PARAGUAY Google Chrome Windows
    30 julio 2012 at 15:57 #

    Un aporte.. en oracle si quieres los primeros “N” registros se puede hacer mas directo… ej 10 primeros registros:

    SELECT TABLA.* FROM TABLA WHERE ROWNUM <= 10

    creo que esto es valido para SQL SERVER

  2. avatar
    pepito PERU Mozilla Firefox Windows
    30 enero 2012 at 14:57 #

    O.O MySQL y PostgreSQL

  3. avatar
    abraham MEXICO Mozilla Firefox Windows
    4 noviembre 2011 at 14:11 #

    en informix seria de este modo
    SELECT skip 20 first 10 campo FROM tabla
    donde skip le dice a la consulta que se “salte” los primeros n y first le dice que obtenga los primeros m

    • avatar
      GeekZero PARAGUAY Google Chrome Windows
      4 noviembre 2011 at 14:15 #

      Muchas gracias por el aporte!!

      Saludos.

  4. avatar
    George Mozilla Firefox Windows
    10 julio 2011 at 22:18 #

    buen aporte amigo, el codigo se entiende, podria ser mucho mejor si el codigo no me mostrara el numero de filas al momento de devolver los resultados !! saludos

  5. avatar
    elperucho ARGENTINA Google Chrome Windows
    27 julio 2010 at 07:20 #

    Excelente aporte

Trackbacks/Pingbacks

  1. Paginar consultas SQL con SQL Server 2012 o superior | DevTroce.com WordPress - 10 septiembre 2014

    […] unos años veíamos como realizar consultas paginadas con sql en distintos motores, hacerlo con SQL Server con versiones inferiores a 2012 era bastante […]

Responder