Lección 4 de SQL: Filtrado y ordenación de resultados de consultas

Aunque los datos de una base de datos pueden ser únicos, los resultados de una consulta en particular pueden no serlo; tomemos como ejemplo nuestra tabla Películas, se pueden estrenar muchas películas diferentes el mismo año. En tales casos, SQL proporciona una forma conveniente de descartar filas que tienen un valor de columna duplicado mediante el uso de la palabra clave DISTINCT.

  • Consulta de selección con resultados únicos
SELECT DISTINCT column, another_column, …
FROM mytable
WHERE condition(s);

Dado que la palabra clave DISTINCT eliminará ciegamente filas duplicadas, aprenderemos en una lección futura cómo descartar duplicados en función de columnas específicas usando la agrupación y la cláusula GROUP BY.

Ordenar resultados

A diferencia de la tabla perfectamente ordenada de las lecciones anteriores, la mayoría de los datos de las bases de datos reales se agregan sin ningún orden de columnas en particular. Como resultado, puede resultar difícil leer y comprender los resultados de una consulta a medida que el tamaño de una tabla aumenta a miles o incluso millones de filas.

Para ayudar con esto, SQL proporciona una manera de ordenar los resultados por una columna determinada en orden ascendente o descendente utilizando la cláusula ORDER BY.

  • Consulta de selección con resultados ordenados
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC;

Cuando se especifica una cláusula ORDER BY, cada fila se ordena alfanuméricamente según el valor de la columna especificada. En algunas bases de datos, también se puede especificar una intercalación para ordenar mejor los datos que contienen texto internacional.

Limitar los resultados a un subconjunto

Otra cláusula que se utiliza habitualmente con la cláusula ORDER BY son las cláusulas LIMIT y OFFSET, que son una optimización útil para indicar a la base de datos el subconjunto de los resultados que le interesan.

La cláusula LIMIT reducirá la cantidad de filas que se devolverán y la cláusula opcional OFFSET especificará desde dónde comenzar a contar la cantidad de filas.

  • Consulta de selección con filas limitadas
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC
LIMIT num_limit OFFSET num_offset;

Si piensas en sitios web como Reddit o Pinterest, la página principal es una lista de enlaces ordenados por popularidad y fecha, y cada página posterior puede estar representada por conjuntos de enlaces en diferentes posiciones en la base de datos. Al utilizar estas cláusulas, la base de datos puede ejecutar consultas de forma más rápida y eficiente al procesar y devolver solo el contenido solicitado.

¿Sabías?.
Si tiene curiosidad sobre cuándo se aplican LIMIT y OFFSET en relación con las demás partes de una consulta, generalmente se aplican al final, después de que se hayan aplicado las demás cláusulas. Hablaremos más sobre esto en la Lección 12: Orden de ejecución, después de presentar algunas partes más de la consulta.

Ejercicio

En esta lección se incluyen algunos conceptos, pero todos son bastante sencillos de aplicar. Para darle un toque más interesante, hemos modificado la tabla Movies para que se parezca más al tipo de datos que podría ver en la vida real. Intente utilizar las palabras clave y las cláusulas necesarias que se presentaron anteriormente en sus consultas.


  1. Lista todos los directores de películas de Pixar (en orden alfabético), sin duplicados.
  2. Lista las últimas cuatro películas de Pixar estrenadas (ordenadas de la más reciente a la menos reciente).
  3. Lista las 5 primeras películas de Pixar ordenadas alfabéticamente
  4. Lista las 5 próximas películas de Pixar ordenadas alfabéticamente