Hasta ahora hemos realizado consultas que, aunque nos permiten filtrar datos, obtienen todos los registros que cumplen con ciertas condiciones. ¿Qué podemos hacer cuando la consulta devuelve muchos registros? o simplemente si queremos mostrar un número determinado de registros para poder realizar consultas como “las cinco publicaciones más vistas”, “las tres publicaciones más votadas”, “las últimas 10 publicaciones”.
LIMIT
Con LIMIT podemos especificar la cantidad máxima de resultados que devuelve una consulta a un valor determinado.
-- Mostrar cinco publicaciones
SELECT id, titulo FROM publicaciones LIMIT 5;
Al establecer un valor después de LIMIT, estamos indicando que queremos esa cantidad máxima de resultados.
OFFSET
Se utiliza para indicar desplazamiento – número de registros que se van a dejar pasar – para que los resultados no se muestren desde el primer registro que se obtuvo.
-- Mostrar 5 publicaciones pero dejar pasar
-- los primeros dos registros y comenzar a
-- mostrar del tercer registro en adelante.
SELECT id, titulo FROM publicaciones LIMIT 5 OFFSET 2;
LIMIT, OFFSET
Cuando utilizamos LIMIT podemos asignar dos parámetros. El primero indica el desplazamiento – el número de registros que vamos a dejar pasar – OFFSET y el segundo la cantidad de registros que se quieren visualizar – LIMIT -.
-- Misma consulta que la anterior.
SELECT id, titulo FROM publicaciones LIMIT 5 OFFSET 2;
-- Al utilizar LIMIT con dos parámetros nos ahorramos
-- la palabra OFFSET. Esta notación puede ser confusa porque
-- los valores de LIMIT y OFFSET están invertidos.
SELECT id, titulo FROM publicaciones LIMIT 2, 5;
Al utilizar LIMIT podemos utilizar ORDER BY para ordenar los registros ANTES de limitar la visualización.
-- Seleccionar id, titulo y usuario_id
-- de la tabla publicaciones
-- ordenar por el valor de la columna
-- usuario_id de manera descendente.
-- Mostrar cinco registros pero dejar
-- pasar el primer registro.
SELECT id, titulo, usuario_id
FROM publicaciones
ORDER BY usuario_id DESC
LIMIT 5 OFFSET 1;
Al igual que con ORDER BY, podemos utilizar WHERE para filtrar los registros de la base de datos y, una vez obtenidos ordenarlos y limitarlos.
-- Seleccionar id, titulo y usuario_id
-- de la tabla publicaciones
-- donde el título no contenga
-- el término java.
-- Ordenar por el valor de la columna
-- usuario_id de manera ascendente.
-- Mostrar cinco registros pero dejar
-- pasar el primer registro.
SELECT id, titulo, usuario_id
FROM publicaciones
WHERE titulo NOT LIKE "%java%"
ORDER BY usuario_id ASC
LIMIT 5 OFFSET 1;
Al utilizar LIMIT, OFFSET con ORDER BY y los operadores de comparación podemos realizar consultas para obtener registros más particulares.