SQL Subconsultas
SQL Subconsultas
4 ¿Cuál es el importe total de los pedidos realizados por el empleado Vicente Pantalla?
7 Listar cuántos empleados están asignados a cada oficina, indicar el número de oficina
y cuántos hay asignados.
8 Para cada empleado, obtener su número, nombre, e importe vendido por ese
empleado a cada cliente indicando el número de cliente.
9 Para cada empleado cuyos pedidos suman más de 30.000 euros, hallar su importe
medio de pedidos. En el resultado indicar el número de empleado y su importe medio de
pedidos.
Ejercicio 1
SELECT nombre Hemos supuesto que no pueden haber dos
FROM clientes empleados con el mismo nombre, de lo
WHERE repclie = (SELECT numemp contrario habría que añadir ANY antes de la
FROM empleados WHERE nombre = subconsulta.
'Alvaro Jaumes' );
Ejercicio 2
Solución 1 Con esta solución buscamos que la oficina del
SELECT numemp, nombre, oficina empleado esté en la lista de oficinas que tienen
FROM empleados ventas superiores a su objetivo.
WHERE oficina IN ( SELECT oficina
FROM oficinas WHERE ventas >
objetivo );
Ejercicio 3
Solución 1 Obtenemos los empleados tales que no exista
SELECT numemp, nombre, oficina una oficina igual a la suya que además esté
FROM empleados dirigida por el empleado 108, con esta solución
WHERE NOT EXISTS ( SELECT * sí aparecen los empleados que no tienen
FROM oficinas WHERE oficina.
empleados.oficina = oficinas.oficina
AND dir = 108);
Ejercicio 4
SELECT idfab, idproducto, En este caso es más cómodo utilizar NOT
descripcion EXISTS ya que hay que preguntar por
FROM productos el idfab e idproducto a la vez.
WHERE NOT EXISTS (SELECT *
FROM pedidos WHERE fab = idfab
AND producto = idproducto AND
importe >= 25000);
Ejercicio 5
SELECT numclie, nombre
FROM clientes
WHERE repclie IN ( SELECT numemp
FROM empleados WHERE nombre =
'Ana Bustamante' )
AND numclie NOT IN ( SELECT clie
FROM pedidos WHERE importe >
3000);
Ejercicio 6
SELECT * En una subconsulta todos los campos no
FROM oficinas cualificados se presuponen de la tabla origen
WHERE EXISTS ( SELECT * FROM de la subconsulta y sólo si no existe ninguna
empleados WHERE ventas > objetivo columna con ese nombre, la considera como
* 0.55); referencia externa, por eso no es necesario
cualificar ventas porque interpreta que es el
campo ventas de la tabla empleados.
Ejercicio 7
SELECT * Esta solución no vale porque salen las oficinas
FROM oficinas que no tienen empleados.
WHERE (objetivo * 0.5) <= ALL ( Hay que añadir una condición para que se
SELECT ventas FROM empleados consideren sólo las oficinas con empleados
WHERE empleados.oficina = como muestra la solución 1.
oficinas.oficina );
Solución 1
SELECT *
FROM oficinas
WHERE ((objetivo * 0.5) <= ALL (
SELECT ventas FROM empleados
WHERE empleados.oficina =
oficinas.oficina ) )
AND ( EXISTS ( SELECT * FROM
empleados WHERE
empleados.oficina = oficinas.oficina )
);
Ejercicio 8
SELECT *
FROM oficinas
WHERE objetivo > ( SELECT SUM(cuota) FROM empleados WHERE empleados.oficina =
oficinas.oficina);