1. Bases de datos relacionales

1.11. Consultas avanzadas: subconsultas

En ocasiones deseamos realizar un tipo de pregunta sobre nuestros datos, pero esta no es factible porque la organización en tablas escogida no lo permite. Para solventar este problema, MySQL permite anidar una consulta dentro de otra, con el objetivo de utilizar la pregunta interior para darle la forma apropiada a los datos, que podrán ser tratados posteriormente mediante la consulta exterior.

Sintaxis básica de una subconsulta:

SELECT lista_columnas
FROM nombre_tabla
WHERE condición = (SELECT lista_columnas2
FROM nombre_tabla2
WHERE condiciones);

Sintácticamente, desde el punto de vista de la consulta principal, la subconsulta interior desempeñará el papel de una tabla convencional. Por esta razón, es posible asignar un nombre tanto a la consulta interior como a los atributos de los resultados que se desprenderán de esta. Para ello emplearemos la cláusula AS, que permite asociar un nombre a un grupo de operaciones o atributos en SQL. El nombre empleado para esos atributos resulta útil para referirse a ellos desde la consulta exterior.

Figura 47. Sintaxis de las subconsultas.
Fuente: elaboración propia.

Para ejemplificar la clase de escenario donde las subconsultas resultan potencialmente interesantes, imaginemos una tabla genérica llamada tabla con dos atributos, que denominaremos clase y subclase. Cada registro de esta tabla pertenece a una clase general, y dentro de esa clase, a una subclase más específica. Supongamos que nos gustaría calcular el promedio de subclases diferentes, clase por clase, que han sido utilizadas para etiquetar cada registro. Para obtener la respuesta, definiremos una subconsulta que recibirá el nombre de contador. Esta subpregunta agrupará los datos por clases para contar el número total de subclases asignado a los registros de cada clase principal. Finalmente, la consulta exterior simplemente deberá calcular el promedio de los totales calculados por la subconsulta.

Figura 48. Emplear una subconsulta dentro de una consulta principal.
Fuente: elaboración propia.