Está en la página 1de 5

--obtener el total de compras realizadas de cigarrillos de color negro

SELECT SUM(c_comprada), marca, filtro, color, clase, mentol FROM Compras


WHERE color = 'N'
GROUP BY marca, filtro, color, clase, mentol
ORDER BY 1;
--obtener aquellos cigarrillos para los cuales existen pedidos de cantidad
--superior a la media de los pedidos encontrados
SELECT *FROM Compras
WHERE c_comprada > (SELECT AVG (c_comprada) FROM Compras);
--obtener una relacin completa de todas las compras y ventas de Cigarrillos
SELECT *FROM Compras UNION SELECT *FROM Ventas
--Obtener la relacin de cigarros que han sido abastecidos a los estancos para los
cuales
no se han realizado ninguna venta
SELECT marca, filtro, color, clase, mentol FROM Compras
WHERE (marca, filtro ,color ,clase, mentol) NOT IN
(SELECT DISTINCT marca, filtro, color, clase, mentol FROM Ventas);
--Obtener la relacin de cigarrillos que han sido abastecidos a los estancos y de
los cuales se han realizado alguna venta
SELECT marca, filtro, color, clase, mentol FROM Compras
WHERE (marca, filtro ,color ,clase, mentol) IN
(SELECT DISTINCT marca, filtro, color, clase, mentol FROM Ventas);
--Obtener la relacin de estancos que no han vendido el cigarrillos de marca 'Duca
dos', con filtro de color negro sin mentol y clase normal
SELECT *FROM Estancos WHERE nif_estancos NOT IN
(SELECT nif_estancos FROM Ventas WHERE (marca = 'Ducados' AND color = 'N' AND fi
ltro = 'S' AND mentol = 'S' AND clase = 'Normal'));
--Obtener la relacion de gabricantes de los cuales se ha vendido algun cigarro
Select *FROM Fabricantes WHERE nombre_fabricante IN
(SELECT DISTINCT nombre_fabricante FROM Manufactura WHERE marca IN
(SELECT DISTINCT marca FROM Cigarrillos WHERE EXISTS
(SELECT *FROM Ventas WHERE Cigarrillos.marca = Ventas.ma
rca
Cigarrillos.filtro = Ventas.f
iltro
Cigarrillos.color = Ventas.co
lor
Cigarrillos.clase = Ventas.cl
ase
Cigarrillos.mentol = Ventas.m
entol)));
--Insertar una nueva marca de cigarrillos producida por un fabricante no existen
te en la BD
INSERT INTO Fabricantes VALUES ('Cohiba S.A.','Espaa');
INSERT INTO Manufactura VALUES ('Cohiba','Cohiba S.A.', '10', '20');
INSERT INTO Cigarrillos VALUES ('Cohiba', 'N', 'R', 'Normal', 'N', 1.1, 15, 2);
--Dar de alta un nuevo estanco y abastecerlo con 10 unidades de cada uno de los
cigarrillos existentes en la base de datos
INSERT INTO Estancos VALUES ('3030404000-K', 3444, 28012, 'El Fumador Loco', 'C/

La Hoja, 17', 'Madrid', 'Madrid' );


INSERT INTO Almacenes (SELECT '30304000-K', marca, filtro, color, clase, mentol,
10 FROM Cigarrillos);
INSERT INTO Compras (SELECT '30304000-K', marca, filtro, color, clase, mentol, S
YSDATE, 10, precio_costo FROM Cigarrillos);
INSERT INTO Ventanas (SELECT DISTINCT Estancos.nif_estanco, Cigarrillos.marca, C
igarrillos.color, Cigarrillos.clase, Cigarrillos.mentol, SYSDATE, 2, precio_vent
a
FROM Estancos, Cigarrillos WHERE provincia_ventaja = 'Sevilla' AND Cigarrillos.f
iltro = 'N' AND Cigarrillos.color = 'R');
--Para Todos aquellos tabacos de los que se hayan vendido mas de cincuenta unida
des en la fecha actual, realizar un pedido de compras del 50% de la cantidad ven
dida
INSERT INTO Compras (SELECT DISTINCT nif_estanco, Ventas.marca, Ventas.filtro, V
entas.color, Ventas.clase, Ventas.mentol, SYSDATE, c_vendida*0.5, Cigarrillos.pr
ecio_costo
FROM Ventas, Cigarrillos WHERE Ventas.c_vendida > 50 AND Ventas.fecha_venta <= S
YSDATE
AND Cigarrillos.marca = Ventas.marca
AND Cigarrillos.filtro = Ventas.filtro
AND Cigarrillos.color = Ventas.color
AND Cigarrillos.clase = Ventas.clase
AND Cigarrillos.mentol = Ventas.mentol);
--Se ha fabricado un nuevo cigarrillo de marca 'Negritos', sin filtro, negro, Su
perLight y no mentolado, fabricado por un fabricante ya existente. Abastecer
con 75 unidades a todos los estancos que no lo tengan
INSERT INTO Manufactura VALUES ('Negritos', 'Tabacalera S.A.', 10, 20);
INSERT INTO Cigarrillos VALUES ('Negritos', 'S', 'N', 'SuperLight', 'N', 0.8, 10
, 100, 130);
INSERT INTO Almacenes (SELECT nif_estanco, 'Negritos', 'S', 'N', 'SuperLight', '
N', 75 FROM Estancos
WHERE nif_estanco NOT IN
(SELECT DISTINCT nif_estanco FROM Compras
WHERE marca = 'Negritos' AND filtro = 'S'
AND color = 'N' AND clase = 'SuperLight' AND mentol = 'N'));
INSERT INTO Compras
(SELECT nif_estanco, 'Negritos', 'S', 'N', 'SuperLight', 'N', SYSDATE, 7
5, 100 FROM Estancos
WHERE nif_estancos NOT IN FROM Compras WHERE marca = 'Negritos'
AND filtro = 'S'
AND color = 'N' AND clase = 'SuperLight' AND mentol = 'N'));
UPDATE ESTANCOS
SET CP_ESTANCO = 28004
WHERE LOCALIDAD_ESTANCO = 'Madrid';
UPDATE CIGARRILLOS
SET FILTRO = 'N'
WHERE MARCA IN
(SELECT MARCA
FROM MANUFACTURA WHERE NOMBRE_FABRICANTE = 'Tabacalera S.A.'
AND FILTRO = 'S' AND CLASE = 'NORMAL');
UPDATE COMPRAS
SET C_COMPRADA = C_COMPRADA - 2

WHERE (MARCA, FILTRO, COLOR, CLASE, MENTOL,) IN


(SELECT COMPRAS.MARCA, COMPRAS.FILTRO, COMPRAS.COLOR, COMPRAS.CLASE, COMPRAS.
MENTOL
FROM COMPRAS, CIGARRILLOS
WHERE CIGARRILLOS.CLASE = 'Light'
AND CIGARRILLOS.NICOTINA < 1.0
AND COMPRAS.FECHA_COMPRA =
(SELECT MAX(FECHA_COMPRA)
FROM COMPRAS
WHERE CIGARRILLOS.MARCA = COMPRAS.MARCA
AND CIGARRILLOS.FILTRO = COMPRAS.FILTRO
AND CIGARRILLOS.COLOR = COMPRAS.COLOR
AND CIGARRILLO.CLASE = COMPRAS.CLASE
AND CIGARRILLOS.MENTOL = COMPRAS.MENTOL));
UPDATE COMPRAS
SET C_COMPRADAS = C_COMPRADA + 5
WHERE FECHA_COMPRA = SYSDATE AND
(SELECT DISTINCT MARCA, FILTRO, COLOR, CLASE FROM VENTAS
WHERE MONTH_BETWEEN(SYSDATE, FECHA_VENTA) = 1
GROUP BY MARCA, FILTRO, COLOR, CLASE
HAVING COUNT(*) > 20);
UPDATE FABRICANTE
SET PAIS = 'USA'
WHERE NOMBRE_FABRICANTE IN
(SELECT DISTINCT NOMBRE_FABRICANTE
FROM MANUFACTURA
WHERE MARCA IN
(SELECT DISTINCT MARCA FROM CIGARRILLOS
WHERE CLASE = 'SuperLight' AND FILTRO = 'S'));
Borrado de la informacion
DELETE
FROM ESTANCOS
WHERE LOCALIDAD_ESTANCO = 'Madrid'
AND PROVINCIA_ESTANCO = 'Madrid';
DELETE
FROM ESTANCOS WHERE NIF_ESTANCO IN
(SELECT DISTINCT NIF_ESTANCO
FROM VENTAS
GROUP BY NIF_ESTANCO
HAVING COUNT(*) < 500);
DELETE
FROM FABRICANTES
WHERE NOMBRE_FABRICANTE NOT IN
(SELECT DISTINCT NOMBRE_FABRICANTE
FROM MANUFACTURA
WHERE MARCA IN
(SELECT MARCA FROM CIGARRILLOS
WHERE CLASE = 'UltraLight'));
DELETE
FROM COMPRAS
WHERE FECHA_COMPRA = SYSDATE
AND (NIF_ESTANCO, MARCA, FILTRO, COLOR, CLASE, MENTOL ) NOT IN
(SELECT DISTINCT (NIF_ESTANCO, MARCA, FILTRO, COLOR, CLASE, MENTOL)

FROM VENTAS
WHERE FECHA_VENTA = SYSDATE);
DELETE
FROM ALMACENES
WHERE (NIF_ESTANCO, MARCA, FILTRO, COLOR, CLASE, MENTOL)
NOT IN (SELECT DISTINCT (NIF_ESTANCO, MARCA, CLASE, FILTRO, COLOR, CLASE, ME
NTOL)
FROM VENTAS);
DELETE
FROM ALMACENES A
WHERE NOT EXISTS
(SELECT * FROM VENTAS V
WHERE A.NIF_ESTANCO = V.NIF_ESTANCO AND
A.MARCA = V.MARCA AND A.FILTRO = V.FILTRO AND
A.COLOR = V.COLOR AND A.CLASE = V.CLASE AND
A.MENTOL = V.MENTOL);

--MODIFICAR EL PRECIO DE VENTA DE LOS CIGARRILLOS, SEGUN LA SIGUIENTE REGLA. EL


PRECIO DE VENTA DEBE SER UN 20% MAYOR QUE EL PRECIO DE COSTE
PARA LOS CIGARRILLOS NACIONALES Y UN 30% MAYOR PARA LOS EXTRANJEROS
DECLARE
CURSOR nuevo_precio IS
SELECT Cigarrillos.marca, Cigarrillos.precio_costo, Fabricantes.pais,
Cigarrillos.filtro,
Cigarrillos.color, Cigarrillos.clase, Cigarrillos.mentol
FROM Cigarrillos, Fabricantes, Manufactura
WHERE Manufactura.nombre_fabricante = Fabricantes.nombre_fabricante AN
D
Cigarrillos.marca = manufactura.marca;
BEGIN
FOR precio_record IN nuevo_precio LOOP
IF precio_record.pais = 'Espaa' THEN
ELSE
incremente_costo := 0.2;
END IF
UPDATE Cigarrillos
SET precio_venta = precio_record.precio_costo + (incremento_cost
o * precio_record.precio_costo)
WHERE Cigarrillos.marca = precio_record.marca AND
Cigarrillos.filtro = precio_record.filtro AND
Cigarrillos.color = precio_record.color AND
Cigarrillos.clase = precio_record.clase AND
Cigarrillos.mentol = precio_record.mentol;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;