En MySQL, cuando queremos limitar el rango de registros devueltos por una sentencia SELECT tenemos la opción de utilizar LIMIT:
Select
*
FROM
tabla LIMIT 10,5
Esta sentencia nos permite devolver 5 registros a partir del décimo. El ejemplo sería aplicable por ejemplo a un listado paginado con 5 registros por página y estuviésemos mostrando la tercera de ellas.
El problema es que SQL no tiene la opción de usar LIMIT. En ocasiones podemos solventarlo rápidamente utilizando TOP, con el que podemos devolver un cierto número de registros, pero solo desde el primero de la sentencia. La solución para esto se puede ver en el siguiente código:
SELECT
*
FROM
(
SELECT
*, ROW_NUMBER() OVER (
ORDER
BY
id)
AS
row
FROM
tabla )
AS
alias
WHERE
row > 10
AND
row <= 14
ROW_NUMBER() nos devuelve el número de línea de la consulta empezando por 1. Con este número de secuencia renombrado como row, ya podemos decirle con un simple where que nos lo limite en un cierto intervalo. Ciertamente es una solución en SQL un tanto enrevesada frente a la sencillez del LIMIT ofrecido por MySQL.