Nombre: Luba Carolina Narváez Erazo
Código: 1088354080
TALLER SQL CAP. 5 Y 6.
Tema 5. Las subconsultas (I)
1 Listar los nombres de los clientes que tienen asignado el representante Alvaro Jaumes
(suponiendo que no pueden haber representantes con el mismo nombre).
SELECT nombre FROM clientes
WHERE repclie = (SELECT numemp FROM empleados WHERE nombre = 'Alvaro
Jaumes' )
2 Listar los vendedores (numemp, nombre, y nº de oficina) que trabajan en oficinas
"buenas" (las que tienen ventas superiores a su objetivo).
SELECT numemp, nombre, oficina
FROM empleados
WHERE oficina IN ( SELECT oficina FROM oficinas WHERE ventas > objetivo );
3 Listar los vendedores que no trabajan en oficinas dirigidas por el empleado 108.
SELECT numemp, nombre, oficina
FROM empleados
WHERE NOT EXISTS ( SELECT * FROM oficinas WHERE empleados.oficina =
oficinas.oficina AND dir = 108);
4 Listar los productos (idfab, idproducto y descripción) para los cuales no se ha recibido
ningún pedido de 25000 o más.
SELECT idfab, idproducto, descripcion
FROM productos
WHERE NOT EXISTS (SELECT * FROM pedidos WHERE fab = idfab AND producto =
idproducto AND importe >= 25000);
5 Listar los clientes asignados a Ana Bustamante que no han remitido un pedido superior
a 3000 Pts.
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 AND clie IS
NOT NULL)
6 Listar las oficinas en donde haya un vendedor cuyas ventas representen más del 55%
del objetivo de su oficina.
SELECT *
FROM oficinas
WHERE EXISTS ( SELECT * FROM empleados WHERE
empleados.oficina=oficinas.oficina AND ventas > objetivo * 0.55);
7 Listar las oficinas en donde todos los vendedores tienen ventas que superan al 50% del
objetivo de la oficina.
SELECT *
FROM oficinas
WHERE (objetivo * .5) <= (SELECT MIN(ventas) FROM empleados WHERE
empleados.oficina = oficinas.oficina);
8 Listar las oficinas que tengan un objetivo mayor que la suma de las cuotas de sus
vendedores.
SELECT *
FROM oficinas
WHERE objetivo > ( SELECT SUM(cuota) FROM empleados WHERE empleados.oficina
= oficinas.oficina);
Ejercicios tema 6. Actualización de datos
1 Crear una tabla (llamarla nuevaempleados) que contenga las filas de la tabla
empleados.
SELECT * INTO nuevaempleados
FROM empleados;
2 Crear una tabla (llamarla nuevaoficinas) que contenga las filas de la tabla oficinas.
SELECT * INTO nuevaoficinas
FROM oficinas;
3 Crear una tabla (llamarla nuevaproductos) que contenga las filas de la tabla productos.
SELECT * INTO nuevaproductos
FROM productos;
4 Crear una tabla (llamarla nuevapedidos) que contenga las filas de la tabla pedidos.
SELECT * INTO nuevapedidos
FROM pedidos;
5 Subir un 5% el precio de todos los productos del fabricante ACI.
UPDATE productos SET precio = precio * 1.05 WHERE idfab = 'ACI';
6 Añadir una nueva oficina para la ciudad de Madrid, con el número de oficina 30, con un
objetivo de 100000 y región Centro.
INSERT INTO oficinas (oficina,region,ciudad,dir,objetivo,ventas)
VALUES (30, 'centro', 'Madrid', null, 100000,0) ;
7 Cambiar los empleados de la oficina 21 a la oficina 30.
UPDATE empleados SET oficina = 30 WHERE oficina = 21;
8 Eliminar los pedidos del empleado 105.
DELETE FROM pedidos WHERE rep = 105;
9 Eliminar las oficinas que no tengan empleados.
DELETE FROM oficinas WHERE oficina NOT IN (SELECT oficina
FROM empleados WHERE oficina IS NOT NULL) ;
10 Recuperar los precios originales de los productos a partir de la tabla nuevosproductos.
UPDATE productos INNER JOIN nuevaproductos
ON ( productos.idfab = nuevaproductos.idfab) AND (productos.idproducto =
nuevaproductos.idproducto)
SET productos.precio = nuevaproductos.precio;