Databases
T01-011-01 Subconsultas
Enunciado
Las subconsultas puede aparecer dentro de las cláusulas
WHERE,HAVINGoFROM.Comenzaremos por las
Subconsultas en la cláusula
WHERE
que devuelven valores únicos.Sintaxis
SELECT [atributos]
FROM [tabla]
WHERE expresión operador (
SELECT [atributos]
FROM [tabla]
WHERE [condición]
)Lo que hemos puesto en negrita correspondería a la subconsulta.
Ejemplo:
Si preguntáramos, ¿qué empleados trabajan en el mismo departamento en el que trabaja Fripp? la mayoría, antes de responder, preguntaría a su vez ¿y en qué departamento trabaja Fripp?
Esta última pregunta sería nuestra subconsulta:
SELECT DEPARTMENT_ID
FROM HR.employees
WHERE LAST_NAME = 'Fripp'
DEPARTMENT_ID 50 Es importante que, de todos los datos de Fripp, únicamente nos interesa el valor del atributo DEPARTMENT_ID.
Una vez que conocemos en qué departamento trabaja Fripp, ya podríamos consultar los empleados que trabajan en ese departamento:
SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID
FROM HR.employees
WHERE DEPARTMENT_ID = 50
FIRST_NAME LAST_NAME DEPARTMENT_ID Mozhe Atkinson 50 Sarah Bell 50 Laura Bissot 50 ... ... ... Pero, podríamos haber realizado las 2 consultas anteriores a la vez, sustituyendo el número 50 de la segunda consulta por la primera consulta encerrada entre paréntesis.
SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID
FROM HR.employees
WHERE DEPARTMENT_ID = (
SELECT DEPARTMENT_ID
FROM HR.employees
WHERE LAST_NAME = 'Fripp'
)La anterior es un ejemplo de subconsulta de devolución de valores individuales, ya que devuelve un único valor (50), que posteriormente es utulizado por la consulta externa a través de los operadores relacionales (
=,>,<,!=).Ejercicio:
¿Qué empleados tienen un salario mayor que el doble de la media de los salarios?
Ordena el resultado descendentemente por el salario.
Tipo
Solución
SELECT FIRST_NAME, LAST_NAME, SALARY
FROM HR.employees
WHERE SALARY > 2 * (
SELECT AVG(SALARY)
FROM HR.employees
)
ORDER BY SALARY DESC
Prueba
LibrerÃas (Onfly databases)

