Subconsulta correlacionada


En una consulta de base de datos SQL , una subconsulta correlacionada (también conocida como subconsulta sincronizada ) es una subconsulta (una consulta anidada dentro de otra consulta) que usa valores de la consulta externa. Debido a que la subconsulta puede evaluarse una vez por cada fila procesada por la consulta externa, puede ser lenta.

Este es un ejemplo de una subconsulta correlacionada típica. En este ejemplo, el objetivo es encontrar a todos los empleados cuyo salario esté por encima del promedio de su departamento.

En la consulta anidada anterior, la consulta interna debe volver a ejecutarse para cada empleado. (Una implementación lo suficientemente inteligente puede almacenar en caché el resultado de la consulta interna departamento por departamento, pero incluso en el mejor de los casos, la consulta interna debe ejecutarse una vez por departamento).

Las subconsultas correlacionadas pueden aparecer en otros lugares además de la cláusula WHERE ; por ejemplo, esta consulta usa una subconsulta correlacionada en la cláusula SELECT para imprimir la lista completa de empleados junto con el salario promedio para el departamento de cada empleado. Nuevamente, debido a que la subconsulta está correlacionada con una columna de la consulta externa, debe volver a ejecutarse para cada fila del resultado. [ cita requerida ]

Por lo general, no tiene sentido tener una subconsulta correlacionada en la cláusula FROM porque la tabla en la cláusula FROM es necesaria para evaluar la consulta externa, pero la subconsulta correlacionada en la cláusula FROM no se puede evaluar antes de que se evalúe la consulta externa, lo que provoca un problema del huevo y la gallina . Específicamente, MariaDB enumera esto como una limitación en su documentación. [1]

Sin embargo, en algunos sistemas de bases de datos, se permite usar subconsultas correlacionadas mientras se unen en la cláusula FROM, haciendo referencia a las tablas enumeradas antes de la unión usando una palabra clave específica, produciendo una cantidad de filas en la subconsulta correlacionada y uniéndolas a la tabla en el izquierda. Por ejemplo, en PostgreSQL , agregar la palabra clave LATERAL antes de la subconsulta de la derecha, [2] o en Microsoft SQL Server , usar la palabra clave CROSS APPLY o OUTER APPLY en lugar de JOIN [3] logra el efecto.