Lección 12 de SQL: Orden de ejecución de una consulta

Ahora que tenemos una idea de todas las partes de una consulta, podemos hablar sobre cómo encajan todas ellas en el contexto de una consulta completa.

  • Consulta SELECT completa
SELECT DISTINCT column, AGG_FUNC(column_or_expression), …
FROM mytable
    JOIN another_table
      ON mytable.column = another_table.column
    WHERE constraint_expression
    GROUP BY column
    HAVING constraint_expression
    ORDER BY column ASC/DESC
    LIMIT count OFFSET COUNT;

Cada consulta comienza con la búsqueda de los datos que necesitamos en una base de datos y, a continuación, con el filtrado de esos datos para obtener algo que se pueda procesar y comprender lo más rápido posible. Dado que cada parte de la consulta se ejecuta de forma secuencial, es importante comprender el orden de ejecución para saber qué resultados están accesibles y dónde.

Orden de ejecución de la consulta

1. FROMy JOINs

La cláusula FROM y las subsiguientes JOIN se ejecutan primero para determinar el conjunto de datos de trabajo total que se está consultando. Esto incluye subconsultas en esta cláusula y puede provocar que se creen tablas temporales en segundo plano que contengan todas las columnas y filas de las tablas que se están uniendo.

2. WHERE

Una vez que tenemos el conjunto de datos de trabajo total, las restricciones de primer paso WHERE se aplican a las filas individuales y las filas que no satisfacen la restricción se descartan. Cada una de las restricciones solo puede acceder a las columnas directamente desde las tablas solicitadas en la cláusula FROM. Los alias en la parte SELECT de la consulta no son accesibles en la mayoría de las bases de datos, ya que pueden incluir expresiones que dependen de partes de la consulta que aún no se han ejecutado.

3. GROUP BY

Las filas restantes después de aplicar las restriccionesWHERE se agrupan en función de los valores comunes en la columna especificada en la cláusula GROUP BY. Como resultado de la agrupación, solo habrá tantas filas como valores únicos haya en esa columna. Implícitamente, esto significa que solo debería necesitar usar esto cuando tenga funciones agregadas en su consulta.

4. HAVING

Si la consulta tiene una cláusula GROUP BY, las restricciones de la cláusula HAVING se aplican a las filas agrupadas y se descartan las filas agrupadas que no satisfacen la restricción. Al igual que la cláusula WHERE, los alias tampoco son accesibles desde este paso en la mayoría de las bases de datos.

5. SELECT

Cualquier expresión en la parte SELECT de la consulta se calcula finalmente.

6. DISTINCT

De las filas restantes, se descartarán las filas con valores duplicados en la columna marcada como DISTINCT.

7. ORDER BY

Si la cláusula ORDER BY especifica un orden, las filas se ordenan según los datos especificados en orden ascendente o descendente. Dado que se han calculado todas las expresiones de la parte SELECT de la consulta, puede hacer referencia a alias en esta cláusula.

8. LIMIT/OFFSET

Finalmente, las filas que quedan fuera del rango especificado por LIMIT y OFFSET se descartan, dejando el conjunto final de filas que se devolverán de la consulta.

Conclusión

No todas las consultas necesitan tener todas las partes que enumeramos anteriormente, pero una de las razones por las que SQL es tan flexible es que permite a los desarrolladores y analistas de datos manipular datos rápidamente sin tener que escribir código adicional, todo simplemente usando las cláusulas anteriores.

Ejercicio

Aquí terminan nuestras lecciones sobre consultas SELECT.

¡Felicitaciones por haber llegado hasta aquí!

Este ejercicio intentará poner a prueba tu comprensión de las consultas, así que no te desanimes si te resultan difíciles. Simplemente haz tu mejor esfuerzo.


  1. Encuentra el número de películas que ha dirigido cada director.
  2. Encuentre las ventas totales nacionales e internacionales que se pueden atribuir a cada director.