Sunteți pe pagina 1din 3

EJERCICIO REPASO TAREA 5.

CLIENTE_VIP (num_cli, nombre, apellidos)

CLIENTE (Num_cli, nombre, apellidos, domicilio, localidad, cod_postal,


teléfono, tipo_cli, bono_canjeable)

PEDIDO (Num_ped, fecha_ped, hora_ped, hora_servir, hora_entrega, cliente)

DETALLE_PEDIDO (num_linea, num_ped, cantidad, plato)

PLATO (cod_plato, nombre, precio, stock)


Utilizando sentencias SQL en la herramienta MySQL Workbench, debes realizar las siguientes
operaciones indicando la sentencia que ejecutarías para realizar cada uno de los subapartados:

1.- Inserta los siguientes datos en las correspondientes tablas PEDIDO y DETALLE_PEDIDO. Debes
utilizar los datos que figuran en las tablas siguientes teniendo en cuenta que los campos que aparecen
en blanco no deben utilizarse en las sentencias, es decir, no tendrán ningún valor.

PEDIDO
num_ped fecha_ped hora_ped hora_servir hora_entrega total_pedido cliente
100116 2018/10/05 10:35:00 14:00:00 109

INSERT INTO PEDIDO VALUES ('100116’,'2018/10/05', '10:35:00','14:00:00', NULL, NULL, '109');

DETALLE PEDIDO
num_pedido num_linea cantidad plato total_linea
100116 1 3 001
100116 2 4 004

INSERT INTO DETALLE_PEDIDO VALUES('100116','1',3,'001', NULL);


INSERT INTO DETALLE_PEDIDO VALUES('100116','2',4,'004', NULL);

2.- Incrementa en un 2% (redondeando con dos decimales) el precio de los platos cuyo precio original
es inferior a 3 euros.

UPDATE PLATO SET PRECIO = ROUND((PRECIO*1.02),2) WHERE PRECIO<3;

3.- Eliminar aquellos pedidos que no hayan sido entregados en el mes de septiembre de 2018.

DELETE FROM PEDIDO WHERE MONTH(FECHA_PED) = 9 AND YEAR(FECHA_PED)=2018 AND


HORA_ENTREGA IS NULL;

4.- Incrementar en 15 minutos la hora de servir los pedidos que están pendientes de servir todavía.

UPDATE PEDIDO SET HORA_SERVIR = ADDTIME(HORA_SERVIR,'00:15:00') WHERE


HORA_ENTREGA IS NULL;

5.- Insertar en la tabla CLIENTES_VIP el código, nombre y apellidos de aquellos clientes que han
realizado al menos dos pedidos en la primera quincena de octubre de 2018.

INSERT INTO CLIENTE_VIP


SELECT NUM_CLI, NOMBRE, APELLIDOS
FROM CLIENTE C, PEDIDO PE
WHERE C.NUM_CLI = PE.CLIENTE
AND PE.FECHA_PED BETWEEN '2018/10/01' AND '2018/10/15'
GROUP BY NUM_CLI
HAVING COUNT(PE.NUM_PED)>1;

6.- Actualizar el campo total_linea de todos los detalles de pedidos redondeando el valor con dos
decimales.

UPDATE DETALLE_PEDIDO DE,


(SELECT DE.NUM_PEDIDO, DE.NUM_LINEA,
ROUND((DE.cantidad*P.precio),2) AS IMPORTE_LINEA
FROM DETALLE_PEDIDO DE, PLATO P
WHERE P.cod_plato = DE.plato) AS TEMP
SET DE.TOTAL_LINEA = TEMP.IMPORTE_LINEA
WHERE TEMP.NUM_PEDIDO = DE.NUM_PEDIDO
AND TEMP.NUM_LINEA = DE.NUM_LINEA;

También podría ser:

UPDATE DETALLE_PEDIDO AS DETALLE_PEDIDO1


INNER JOIN PLATO ON (DETALLE_PEDIDO1.plato = PLATO.cod_plato)
SET DETALLE_PEDIDO1.total_linea = ROUND(DETALLE_PEDIDO1.cantidad * PLATO.precio,2)

SIN TABLA TEMPORAL:

UPDATE DETALLE_PEDIDO
INNER JOIN PLATO ON (DETALLE_PEDIDO.plato = PLATO.cod_plato)
SET DETALLE_PEDIDO.total_linea = ROUND(DETALLE_PEDIDO.cantidad * PLATO.precio,2)

7.- Actualizar el campo total_pedido de todos los pedidos teniendo en cuenta el campo total_linea de sus
correspondientes detalles.

UPDATE PEDIDO
SET TOTAL_PEDIDO = (SELECT SUM(DE.TOTAL_LINEA)
FROM DETALLE_PEDIDO DE
WHERE DE.NUM_PEDIDO = PEDIDO.NUM_PED
GROUP BY DE.NUM_PEDIDO);

/* Otra forma usando tabla temporal */

UPDATE PEDIDO PE,(SELECT DE.NUM_PEDIDO, SUM(DE.TOTAL_LINEA) AS IMPORTE_TOTAL


FROM DETALLE_PEDIDO DE
GROUP BY DE.NUM_PEDIDO) AS TEMP
SET PE.TOTAL_PEDIDO = TEMP.IMPORTE_TOTAL
WHERE TEMP.NUM_PEDIDO = PE.NUM_PED;

También podría ser:

UPDATE PEDIDO
INNER JOIN DETALLE_PEDIDO ON (PEDIDO.num_ped = DETALLE_PEDIDO.num_pedido)
SET PEDIDO.total_pedido = (SELECT SUM(total_linea) FROM DETALLE_PEDIDO WHERE PEDIDO.num_ped =
DETALLE_PEDIDO.num_pedido)

S-ar putea să vă placă și