Databases
T01-011-01 Subconsultas
Enunciado
Subconsultas en la cláusula
WHERE
que devuelven valores únicos.Si utilizamos operadores relacionales con una subconsulta que no devuelve un único valor, el sistema nos devolverá un error.
Ejemplo:
Imaginemos que queremos mostrar el nombre y apellidos del empleado que mayor salario tiene. Una forma de solucionar esta consulta es con un planteamiento muy similar al del ejercicio anterior: "muestra aquel empleado cuyo salario es mayor que el de sus compañeros":
SELECT FIRST_NAME, LAST_NAME, SALARY
FROM HR.employees
WHERE SALARY > (
SELECT SALARY
FROM HR.employees
)
ORDER BY SALARY DESCLo que ocurre es que, en este caso, salarios de compañeros hay muchos, por lo que utilizar el operador relacional
>con todos esos datos genera el siguiente error:ORA-01427: single-row subquery returns more than one row
Para poder solucionar este error, podemos acompañar el operador relacional de las cláusulas
ANY,ALL,EXISTSoNOT EXISTS.Con lo que la consulta quedaría "muestra aquel empleado cuyo salario es mayor o igual que todos los de de sus compañeros".
SELECT FIRST_NAME, LAST_NAME, SALARY
FROM HR.employees
WHERE SALARY >= ALL (
SELECT SALARY
FROM HR.employees
)
ORDER BY SALARY DESC
FIRST_NAME LAST_NAME SALARY Steven King 24000
Ejercicio:
De los empleados del departamento 'Shipping', ¿quién es el que menor antigüedad?
Ordena el resultado descendentemente por el salario.
Tipo
Solución
SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_NAME
FROM HR.employees JOIN HR.departments USING (DEPARTMENT_ID)
WHERE HIRE_DATE >= ALL (
SELECT HIRE_DATE
FROM HR.employees JOIN HR.departments USING (DEPARTMENT_ID)
WHERE DEPARTMENT_NAME = 'Shipping'
)
AND DEPARTMENT_NAME = 'Shipping'
Prueba
LibrerÃas (Onfly databases)

