a) Creación de la base de datos y tablas con integridad referencial
-- Crear Base de Datos
CREATE DATABASE ventas_supermercado;
USE ventas_supermercado;
-- Tabla CIUDAD
CREATE TABLE ciudad (
cod_ciudad CHAR(2) PRIMARY KEY,
nom_ciudad VARCHAR(50)
);
-- Tabla SUPERMERCADO
CREATE TABLE supermercado (
cod_sup CHAR(2) PRIMARY KEY,
direccion VARCHAR(100),
tfno CHAR(9),
cod_ciudad CHAR(2),
FOREIGN KEY (cod_ciudad) REFERENCES ciudad(cod_ciudad)
);
-- Tabla PRODUCTO
CREATE TABLE producto (
cod_prod CHAR(2) PRIMARY KEY,
denominacion VARCHAR(100),
precio DECIMAL(5,2)
);
-- Tabla VENTAS
CREATE TABLE ventas (
cod_sup CHAR(2),
cod_prod CHAR(2),
cant INT,
PRIMARY KEY (cod_sup, cod_prod),
FOREIGN KEY (cod_sup) REFERENCES supermercado(cod_sup),
FOREIGN KEY (cod_prod) REFERENCES producto(cod_prod)
);
b) Inserción de datos
-- CIUDAD
INSERT INTO ciudad VALUES
('C1', 'Bilbao'),
('C2', 'Vitoria'),
('C3', 'San Sebastián');
-- SUPERMERCADO
INSERT INTO supermercado VALUES
('S1', 'Gran Vía 1', '111111111', 'C1'),
('S2', 'Alda. Recalde 7', '222222222', 'C1'),
('S3', 'Ondarreta 7', '333333333', 'C2'),
('S4', 'Dato 3', '444444444', 'C3'),
('S5', 'Avda. de Vitoria 8', '555555555', 'C3');
-- PRODUCTO
INSERT INTO producto VALUES
('P1', 'Nocilla', 3.00),
('P2', 'Tomate Orlando', 1.50),
('P3', 'Cereales Nestlé', 3.50),
('P4', 'Cerales Crunch', 3.00),
('P5', 'Pan Bimbo', 2.00),
('P6', 'Pan Panrico', 1.90),
('P7', 'Bonito Zallo', 2.75);
-- VENTAS
INSERT INTO ventas VALUES
('S1', 'P1', 10),
('S2', 'P1', 15),
('S3', 'P1', 8),
('S1', 'P2', 20),
('S2', 'P2', 25),
('S3', 'P2', 15),
('S1', 'P3', 25),
('S2', 'P3', 18),
('S3', 'P3', 20);
c) Aumentar las ventas del producto P1 en 5 unidades para el
supermercado S1
UPDATE ventas
SET cant = cant + 5
WHERE cod_sup = 'S1' AND cod_prod = 'P1';
d) Eliminar el producto P3
-- Primero eliminar las ventas del producto P3 (por restricciones de
integridad)
DELETE FROM ventas
WHERE cod_prod = 'P3';
-- Ahora se puede eliminar el producto
DELETE FROM producto
WHERE cod_prod = 'P3';
e) Importe total de ventas por supermercado
SELECT v.cod_sup, SUM([Link] * [Link]) AS total_ventas
FROM ventas v
JOIN producto p ON v.cod_prod = p.cod_prod
GROUP BY v.cod_sup;
f) Supermercado con mayor importe de ventas
SELECT v.cod_sup, SUM([Link] * [Link]) AS total_ventas
FROM ventas v
JOIN producto p ON v.cod_prod = p.cod_prod
GROUP BY v.cod_sup
ORDER BY total_ventas DESC
LIMIT 1;
g) Producto más vendido (en unidades)
SELECT v.cod_prod, [Link], SUM([Link]) AS total_unidades
FROM ventas v
JOIN producto p ON v.cod_prod = p.cod_prod
GROUP BY v.cod_prod, [Link]
ORDER BY total_unidades DESC
LIMIT 1;
h) Aumentar precio en 5% para productos que hayan tenido alguna venta
UPDATE producto
SET precio = precio * 1.05
WHERE cod_prod IN (SELECT DISTINCT cod_prod FROM ventas);
i) Listado de productos y su importe total de ventas
SELECT p.cod_prod, [Link],
COALESCE(SUM([Link] * [Link]), 0) AS importe_total
FROM producto p
LEFT JOIN ventas v ON p.cod_prod = v.cod_prod
GROUP BY p.cod_prod, [Link];