Las subconsultas también pueden aparecer en la cláusula FROM de un instrucción SELECT. Las subconsultas en la cláusula FROM pueden ser de tipo multi columna y multi fila o escalares. La instrucción SELECT ve como una tabla más los resultados de las subconsultas. Veamos un ejemplo:
En el ejemplo anterior la subconsulta obtiene el valor promedio del todos los totales de las facturas (tabla Invoice) que da como resultado la columna con alias “promedio” con valor 5.65194174757283 y le asigna el alias “promedio_total” a la subconsulta. El SELECT ve la subconsulta como si fuera una tabla llamada “promedio_total”.
La consulta hace un producto cruzado entre “promedio_total” y la tabla “invoice” con alias “factura” y filtra las filas mostrando sólo aquellas que el total de la factura sea mayor al promedio.
En este caso la consulta sólo hace un producto cruzado entre la subconsulta y la tabla, pero puede también ser usado en uniones o concatenaciones tanto internas como externas.
Espero y les sea útil este artículo. ¡Hasta la próxima!
En una entrada anterior vimos el uso de subconsultas en la clausula WHERE (condición) de un SELECT. En esta entrada veremos el uso de las subconsulta dentro de la cláusula SELECT.
Subconsultas (subqueries) en cláusula SELECT.
Veamos el siguiente ejemplo de un subconsulta dentro de la cláusula SELECT.
La subconsulta obtiene la fecha máxima o más reciente de la fecha contratación de un puesto (Title) dado. La subconsulta en la cláusula SELECT por lo general debe ser una subconsulta escalar, debe regresar una sola fila y una sola columna, es decir un sólo valor en cada ejecución. La subconsulta se ejecutará una vez por cada fila que regrese la consulta externa. En el ejemplo, la subconsulta se ejecuta 8 veces, una por cada fila de la tabla Employee (empleado).
Subconsulta correlacionada.
La subconsulta del ejemplo, además de ser escalar, es decir que regresa un sólo valor por cada ejecución, también se dice que es de tipo correlacionada, es decir, es una subconsulta correlacionada. ¿ Qué significa esto? Significa que la subconsulta toma o necesita información de la consulta que la contiene, la cual recibe el nombre de consulta externa. Si observas, a la tabla Employee de la subconsulta se le ha asignado el alias “e2”, mientras que a la misma tabla pero de la consulta externa se le ha asignado el alias “e1”. Observa que la condición del WHERE de la subconsulta hace referencia a la columna “Title” de la consulta externa: “e1.Title = e2.Title”. Al ejecutar la consulta el valor de “e1.Title” cambiará de acuerdo al valor de la fila regresada por la consulta externa.
Vamos a hacer la consulta más precisa, como puedes observar , la combinación de “Puesto” (Title) y “Fecha de Contratación Máximo” [MAX(HireDate)]en algunas ocasiones aparece repetido. Agreguemos la cláusula DISTINCT al SELECT de la siguiente forma par ahacer más óptima la consulta:
Recuerda que la cláusula DISTINCT sirve para no presentar filas duplicadas en los resultados. Presenta sólo filas únicas. Ahora sólo aparece una fila para cada “Puesto” y su “Fecha Contratación Máxima”, de los 8 filas originales sólo quedaron 5.
En un próximo artículo, veremos el uso de las subconsultas en la cláusula FROM.