Pregunta 1¿Cuál de las siguientes describe correctamente SELECT DISTINCT?
DISTINCT, ORDER BY, LIMIT — dar forma al conjunto de resultados
Aprende SQL DISTINCT, ORDER BY, LIMIT y OFFSET. Cubre deduplicación, ordenación, límite de filas y paginación con OFFSET — todo ejecutándose en vivo en tu navegador sobre un dataset score cargado desde CSV.
Datos que usaremos — la tabla score cargada desde CSV
Este artículo usa una tabla `score` cargada automáticamente desde un archivo CSV para recorrer las cuatro construcciones que dan forma a la salida de SELECT — DISTINCT (deduplicación), ORDER BY (ordenación), LIMIT (cantidad de filas) y OFFSET (saltar desde el inicio).
La tabla score tiene 5 columnas — id / name / subject / score / recorded_on — con 15 filas en total: 5 estudiantes (Alice / Bob / Carol / Dave / Eve) cada uno con 3 asignaturas (Math / English / Science).
DISTINCT — devolver solo filas únicas
Un resultado de SELECT puede contener la misma fila varias veces. Por ejemplo, sacar solo la columna name de score devuelve 15 filas — Alice / Bob / Carol / Dave / Eve, tres asignaturas cada uno.
Escribir `SELECT DISTINCT col, ...` colapsa las filas duplicadas en una sola en el conjunto de resultados. Con varias columnas, las filas se consideran duplicadas cuando la combinación de columnas coincide.
-- Lista los nombres únicos de estudiantes
SELECT DISTINCT name FROM score;
-- Lista las asignaturas únicas
SELECT DISTINCT subject FROM score;
-- Dedup sobre la combinación (name, subject) (= las 15 filas son únicas)
SELECT DISTINCT name, subject FROM score;
ORDER BY — ordenar el resultado
SQL no garantiza el orden de las filas por defecto — SELECT * FROM score; deja que la implementación del DB decida en qué orden vuelven las filas. Cuando quieres un orden específico, añade `ORDER BY col [ASC|DESC]`.
- ASC (ascendente / de menor a mayor) es el valor por defecto y se puede omitir
- DESC (descendente / de mayor a menor) debe escribirse explícitamente
- Una lista de varias columnas separadas por comas te da una ordenación multinivel: las filas empatadas en la primera columna se ordenan por la segunda
-- 1) Ascendente por una columna (ASC se puede omitir)
SELECT name, score FROM score ORDER BY score;
-- 2) Descendente por una columna
SELECT name, score FROM score ORDER BY score DESC;
-- 3) Ordenación por varias columnas (por subject, luego score más alto primero dentro de cada asignatura)
SELECT name, subject, score FROM score ORDER BY subject ASC, score DESC;
La letra pequeña de ORDER BY
- ORDER BY va después de `WHERE` y antes de `LIMIT`. Memoriza el orden SELECT cols FROM table WHERE condition ORDER BY col DESC LIMIT N; y no te liarás.
- El lado derecho de ORDER BY puede aceptar un número de columna (ORDER BY 2 DESC ordena por la 2ª columna seleccionada), pero perjudica la legibilidad — la convención es usar nombres de columna.
- En la consola de este curso, la ordenación de cadenas es mayúsculas → minúsculas (orden ASCII). Algunos DB tratan 'A' y 'a' como equivalentes.
LIMIT y OFFSET — acotar la cantidad y paginar
Cuando los conjuntos de resultados se hacen grandes — 100 filas, 10.000 filas — volcar todo en pantalla es pesado y el usuario no puede asimilarlo. Añadir `LIMIT N` devuelve solo las primeras N filas. Combínalo con `OFFSET M` para saltar las primeras M filas y luego tomar N, lo que te da paginación para cosas como "elementos 6–10" o "elementos 11–20".
-- 1) Toma los 5 primeros (ranking TOP 5)
SELECT name, subject, score FROM score
ORDER BY score DESC
LIMIT 5;
-- 2) Toma los elementos 6 al 10 (página 2)
SELECT name, subject, score FROM score
ORDER BY score DESC
LIMIT 5 OFFSET 5;
-- 3) Fórmula de paginación: página N, K filas por página
-- LIMIT K OFFSET (N - 1) * K
-- p. ej. página 3, 5 por página → LIMIT 5 OFFSET 10
| Página | Filas por página | OFFSET | LIMIT | Rango objetivo |
|---|---|---|---|---|
| 1 | 5 | 0 | 5 | 1–5 |
| 2 | 5 | 5 | 5 | 6–10 |
| 3 | 5 | 10 | 5 | 11–15 |
| 1 | 10 | 0 | 10 | 1–10 |
| 2 | 10 | 10 | 10 | 11–20 |
| 1 | 20 | 0 | 20 | 1–20 |
LIMIT sin ORDER BY no garantiza el orden
Escribir solo `LIMIT` y omitir `ORDER BY` como SELECT * FROM score LIMIT 5; deja la elección de qué 5 filas vuelven a la implementación del DB. Incluso en un DB que tiende a devolver filas en orden de inserción (como SQLite), el estándar SQL dice que el orden está indefinido. En MySQL / PostgreSQL, los índices y los planes de ejecución pueden cambiar qué filas obtienes.
Para cualquier cosa donde el orden importe — rankings, paginación, "primeros N elementos" — escribe siempre `ORDER BY` antes de `LIMIT`.
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Qué devuelve SELECT name, score FROM score ORDER BY score DESC;?
Pregunta 3¿Qué filas devuelve SELECT * FROM score ORDER BY score DESC LIMIT 5 OFFSET 10;?