Una subconsulta en SQL consiste en utilizar los resultados de una consulta dentro de otra, que se considera la principal.
Esta posibilidad fue la razón original para la palabra “estructurada” en el nombre Lenguaje de Consultas Estructuradas (Structured Query Language, SQL).
Anteriormente hemos utilizado la cláusula WHERE para seleccionar los datos que deseábamos comparando un valor de una columna con una constante, o un grupo de ellas. Si los valores de dichas constantes son desconocidos, normalmente por proceder de la aplicación de funciones a determinadas columnas de la tabla, tendremos que utilizar subconsultas.
Por ejemplo, queremos saber la lista de empleados cuyo salario supere el salario medio. En primer lugar, tendríamos que averiguar el importe del salario medio :
SELECT AVG(salario) AS Salario_Medio FROM empleados;
A continuación, anotarlo en un papel o recordarlo para la siguiente sentencia:
SELECT dep_no “Nº Empleado”, apellido, salario FROM empleados WHERE salario> 256666.67;
Sería mucho más eficiente utilizar una subconsulta:
SELECT dep_no “Nº Empleado”,apellido,salario FROM empleados
WHERE salario > ( SELECT AVG(salario) FROM empleados );
WHERE salario > ( SELECT AVG(salario) FROM empleados );
NOTA: La subconsulta (comando SELECT entre paréntesis) se ejecuta primero y, posteriormente, el
valor extraído es utilizado en la consulta principal.
valor extraído es utilizado en la consulta principal.
Valores de retorno de las subconsultas y condiciones de selección
Una subconsulta siempre forma parte de la condición de selección en las cláusulas WHERE o
HAVING.
El resultado de una subconsulta puede ser un valor simple o más de un valor. Según el retorno de la subconsulta, el operador de comparación que se utilice en la condición de selección del WHERE o HAVING deberá ser del tipo apropiado según la tabla siguiente:
HAVING.
El resultado de una subconsulta puede ser un valor simple o más de un valor. Según el retorno de la subconsulta, el operador de comparación que se utilice en la condición de selección del WHERE o HAVING deberá ser del tipo apropiado según la tabla siguiente:
Operador comparativo | Retorno de la subconsulta
De tipo aritmético | Valor simple
De tipo lógico | Más de un valor
De tipo lógico | Más de un valor
Condición de selección con operadores aritméticos de comparación.
Se utiliza cuando la subconsulta devuelve un único valor a comparar con una expresión, por lo
general formada a partir de la fila obtenida en la consulta principal.
Si la comparación resulta cierta (TRUE), la condición de selección también lo es. Si la subconsulta no devuelve ninguna fila (NULL),la comparación devuelve también el valor NULL.
NOTA: Operadores_aritméticos de comparación: =,<>,<,>,<=,<=
Ejemplos.
1. Obtener todos los empleados que tienen el mismo oficio que ‘Alonso’.
SELECT emp_no AS NºEmpleado, apellido, oficio FROM empleados
WHERE oficio=(SELECT oficio FROM empleados
WHERE UCASE(apellido)= 'ALONSO');
WHERE oficio=(SELECT oficio FROM empleados
WHERE UCASE(apellido)= 'ALONSO');