Pregunta 1¿Cuál de las siguientes describe correctamente SELECT DISTINCT?
DISTINCT, ORDER BY, LIMIT — dar forma al conjunto de resultados
Este artículo forma parte del Curso de SQL, con el que dominarás desde cero habilidades prácticas de SQL, desde lo básico hasta las consultas complejas y la optimización de SQL.
Elimina duplicados con DISTINCT, ordena con ORDER BY y pagina con LIMIT y OFFSET. Aprende a moldear el resultado usando datos de score cargados desde CSV, ejecutando las 4 sintaxis.
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;?