5. Eliminar los pedidos del representante Luis Antonio. (2 filas afectadas)
DELETE FROM pedidos WHERE rep IN (SELECT numemp FROM empleados WHERE nombre = 'Luis Antonio');
6. Eliminar las oficinas que no tengan empleados. (11 filas afectadas)
DELETE oficinas WHERE NOT EXISTS (SELECT * FROM empleados WHERE empleados.oficina = oficinas.oficina);
7. Intenta eliminar el empleado 102. Te saldrá un error : "Instrucción DELETE en conflicto con la restricción..."
DELETE empleados WHERE numemp=102;
Reflexiona sobre el error y elabora una consulta que liste los empleados que pueden dar problemas (aquí no se trata de utilizar operaciones aprendidas en este tema sino de practicar la integridad referencial y de paso recordar instrucciones vistas en temas anteriores).
SELECT * from empleados WHERE numemp IN (select jefe from empleados) UNION ALL SELECT * FROM empleados WHERE numemp IN (SELECT dir FROM oficinas) UNION ALL SELECT * FROM empleados WHERE numemp IN (SELECT rep FROM pedidos) UNION ALL SELECT * FROM empleados WHERE numemp IN (SELECT repclie FROM clientes) ORDER BY numemp
Elabora ahora una consulta que liste los que se pueden borrar sin problemas.
SELECT numemp FROM empleados EXCEPT SELECT numemp from empleados WHERE numemp IN (select jefe from empleados) EXCEPT SELECT numemp FROM empleados WHERE numemp IN (SELECT dir FROM oficinas) EXCEPT SELECT numemp FROM empleados WHERE numemp IN (SELECT rep FROM pedidos) EXCEPT SELECT numemp FROM empleados WHERE numemp IN (SELECT repclie FROM clientes) ORDER BY numemp
Borra el primero de la lista, éste sí lo puedes borrar.
DELETE empleados WHERE numemp=112;
8. Eliminar los pedidos de productos de ACI cuyo precio de venta en el pedido no corresponda con el precio unitario del producto de la tabla de productos. (4 filas afectadas)
DELETE FROM pedidos WHERE fab = 'ACI' AND Importe/cant <> (SELECT precio FROM productos WHERE fab = idfab AND idproducto = producto);
9. Ahora vamos a recuperar las tablas tal cual estaban al principio, para ello utilizaremos las copias realizadas al principio de Nuevaoficinas, etc. Lo más cómodo será vaciar las tablas y rellenarlas de nuevo con los datos de las tablas Nueva...
Empieza por eliminar los datos de las tablas. Utilizamos TRUNCATE en la tabla pedidos porque no está referenciada y para que el contador empiece desde 1 otra vez
TRUNCATE TABLE pedidos DELETE productos DELETE clientes UPDATE oficinas SET dir = NULL; -- Para poder borrar los empleados UPDATE empleados SET oficina=NULL, jefe=NULL; -- Para poder borrar las oficinas y los empleados respectivamente. DELETE oficinas; DELETE empleados;
Síguenos en: Facebook Sobre aulaClic Política de Cookies
© aulaClic. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.