Base de datos Hand to hand
INTEGRANTES
Isabela Mejia Arenas
Lina Marcela Marquinez Palomeque
Yorman Alexander Castaño Suarez
CREATE TABLE ventas (
codventa INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
fecha_venta DATE NOT NULL,
coddomicilio INT(11),
codtrabajador INT(11) NOT NULL
);
CREATE TABLE productventa (
codproductventa INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
cantidad_producto INT(11) NOT NULL,
codventa INT(11) NOT NULL,
codproducto INT(11) NOT NULL,
total int(11) not null
);
CREATE TABLE productos (
codproducto INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL,
codpedido INT(11) NOT NULL,
nombre_producto VARCHAR(60) NOT NULL,
descripcion TEXT NOT NULL,
valor INT(11) NOT NULL,
cantidad INT(11) NOT NULL,
imagen VARCHAR(30) NOT NULL,
estado varchar(10) not null
);
CREATE TABLE domicilios (
coddomicilio INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
coddomiciliario INT(11) NOT NULL,
direccion VARCHAR(25) NOT NULL,
codcliente INT(11) NOT NULL
);
CREATE TABLE clientes (
codcliente INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
nombre_cliente VARCHAR(60) NOT NULL,
telefono_cliente VARCHAR(15) NOT NULL,
correo_cliente varchar(100) not null,
estado varchar(10) not null
);
CREATE TABLE domiciliarios (
coddomiciliario INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
nombre_domiciliario VARCHAR(60) NOT NULL,
telefono_domiciliario VARCHAR(15) NOT NULL,
correo_domiciliario varchar(100) not null,
estado varchar(10) not null
);
CREATE TABLE pedidos (
codpedido INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
cantidad INT(11) NOT NULL,
codproveedor INT(11) NOT NULL
);
CREATE TABLE proveedores (
codproveedor INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
nombre_proveedor VARCHAR(25) NOT NULL,
telefono_proveedor VARCHAR(15) NOT NULL,
correo_proveedor VARCHAR(100),
estado varchar(10) not null
);
CREATE TABLE vendedores (
codtrabajador INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
nombre_trabajador VARCHAR(25) NOT NULL,
telefono_trabajador VARCHAR(15) NOT NULL,
correo_trabajador VARCHAR(100) NOT NULL,
estado varchar(10) not null
);
ALTER TABLE productventa
ADD CONSTRAINT fk_productventa_venta
FOREIGN KEY (codventa)
REFERENCES ventas (codventa);
ALTER TABLE productventa
ADD CONSTRAINT fk_productventa_producto
FOREIGN KEY (codproducto)
REFERENCES productos (codproducto);
ALTER TABLE productos
ADD CONSTRAINT fk_producto_pedido
FOREIGN KEY (codpedido)
REFERENCES pedidos (codpedido);
ALTER TABLE pedidos
ADD CONSTRAINT fk_pedido_proveedor
FOREIGN KEY (codproveedor)
REFERENCES proveedores (codproveedor);
ALTER TABLE ventas
ADD CONSTRAINT fk_venta_vendedor
FOREIGN KEY (codtrabajador)
REFERENCES vendedores (codtrabajador);
ALTER TABLE ventas
ADD CONSTRAINT fk_venta_domicilio
FOREIGN KEY (coddomicilio)
REFERENCES domicilios (coddomicilio);
ALTER TABLE domicilios
ADD CONSTRAINT fk_domicilio_cliente
FOREIGN KEY (codcliente)
REFERENCES clientes (codcliente);
ALTER TABLE domicilios
ADD CONSTRAINT fk_domicilio_domiciliario
FOREIGN KEY (coddomiciliario)
REFERENCES domiciliarios (coddomiciliario);
-- Insertar en la tabla 'proveedores'
INSERT INTO proveedores (nombre_proveedor, telefono_proveedor, correo_proveedor, estado) VALUES
('TechCorp Ltd.', '555-0001', 'contacto@techcorp.com', 'activo'),
('Gadgets & More', '555-0002', 'info@gadgetsandmore.com', 'activo'),
('Home Electronics', '555-0003', 'sales@homeelectronics.com', 'activo'),
('NextGen Solutions', '555-0004', 'support@nextgensolutions.com', 'activo'),
('Digital World', '555-0005', 'contact@digitalworld.com', 'activo'),
('Innovative Tech', '555-0006', 'info@innovativetech.com', 'activo'),
('Smart Devices Co.', '555-0007', 'sales@smartdevicesco.com', 'activo'),
('Future Gear', '555-0008', 'service@futuregear.com', 'activo'),
('Electro Hub', '555-0009', 'info@electrohub.com', 'activo'),
('Tech Haven', '555-0010', 'contact@techhaven.com', 'activo');
INSERT INTO vendedores (nombre_trabajador, telefono_trabajador, correo_trabajador, estado) VALUES
('Juan Pérez', '555-1001', 'juan.perez@example.com', 'activo'),
('María García', '555-1002', 'maria.garcia@example.com', 'activo'),
('Andrés López', '555-1003', 'andres.lopez@example.com', 'activo'),
('Isabel Martínez', '555-1004', 'isabel.martinez@example.com', 'activo'),
('Felipe Rodríguez', '555-1005', 'felipe.rodriguez@example.com', 'activo'),
('Camila Fernández', '555-1006', 'camila.fernandez@example.com', 'activo'),
('Sergio Gómez', '555-1007', 'sergio.gomez@example.com', 'activo'),
('Natalia Ramírez', '555-1008', 'natalia.ramirez@example.com', 'activo'),
('Carlos Sánchez', '555-1009', 'carlos.sanchez@example.com', 'activo'),
('Ana María Díaz', '555-1010', 'ana.diaz@example.com', 'activo');
INSERT INTO clientes (nombre_cliente, telefono_cliente, correo_cliente, estado) VALUES
('Pedro Pérez', '555-1234', 'pedro.perez@example.com', 'activo'),
('Ana Fernández', '555-5678', 'ana.fernandez@example.com', 'activo'),
('Carlos Gómez', '555-8765', 'carlos.gomez@example.com', 'activo'),
('María Rodríguez', '555-4321', 'maria.rodriguez@example.com', 'activo'),
('Jorge Martínez', '555-6789', 'jorge.martinez@example.com', 'activo'),
('Laura Gómez', '555-9876', 'laura.gomez@example.com', 'activo'),
('Luis García', '555-3456', 'luis.garcia@example.com', 'activo'),
('Isabel Hernández', '555-6543', 'isabel.hernandez@example.com', 'activo'),
('Antonio López', '555-2345', 'antonio.lopez@example.com', 'activo'),
('Carmen Díaz', '555-6780', 'carmen.diaz@example.com', 'activo');
-- Insertar en la tabla 'domiciliarios'
INSERT INTO domiciliarios (nombre_domiciliario, telefono_domiciliario, correo_domiciliario, estado) VALUES
('Andrés Pérez', '555-1100', 'andres.perez@example.com', 'activo'),
('Camila Sánchez', '555-2200', 'camila.sanchez@example.com', 'activo'),
('Felipe Ruiz', '555-3300', 'felipe.ruiz@example.com', 'activo'),
('Natalia Torres', '555-4400', 'natalia.torres@example.com', 'activo'),
('Santiago López', '555-5500', 'santiago.lopez@example.com', 'activo'),
('Gabriela Moreno', '555-6600', 'gabriela.moreno@example.com', 'activo'),
('Ricardo Rodríguez', '555-7700', 'ricardo.rodriguez@example.com', 'activo'),
('Valentina Martínez', '555-8800', 'valentina.martinez@example.com', 'activo'),
('Javier González', '555-9900', 'javier.gonzalez@example.com', 'activo'),
('Mariana Salazar', '555-1001', 'mariana.salazar@example.com', 'activo');
-- Insertar en la tabla 'pedidos'
INSERT INTO pedidos (cantidad, codproveedor) VALUES
(10, 1),
(15, 2),
(12, 3),
(18, 4),
(22, 5),
(10, 6),
(25, 7),
(15, 8),
(20, 9),
(12, 10);
INSERT INTO productos (codpedido, nombre_producto, descripcion, valor, cantidad, imagen, estado) VALUES
(1, 'Laptop Dell', 'Dell Inspiron 15', 600, 20, 'laptop_dell.jpg', 'activo'),
(2, 'Smartphone Samsung', 'Galaxy S21', 700, 15, 'smartphone_samsung.jpg', 'activo'),
(3, 'Televisor LG', 'LG OLED55', 1200, 10, 'televisor_lg.jpg', 'activo'),
(4, 'Auriculares Sony', 'WH-1000XM4', 300, 25, 'auriculares_sony.jpg', 'activo'),
(5, 'Tablet Apple', 'iPad Air', 500, 30, 'tablet_apple.jpg', 'activo'),
(6, 'Reloj Garmin', 'Forerunner 945', 650, 12, 'reloj_garmin.jpg', 'activo'),
(7, 'Cámara Canon', 'EOS R5', 2500, 8, 'camara_canon.jpg', 'activo'),
(8, 'Altavoz JBL', 'Flip 5', 100, 40, 'altavoz_jbl.jpg', 'activo'),
(9, 'Teclado Logitech', 'MX Keys', 120, 22, 'teclado_logitech.jpg', 'activo'),
(10, 'Ratón Razer', 'DeathAdder V2', 70, 18, 'raton_razer.jpg', 'activo');
-- Insertar en la tabla 'domicilios'
INSERT INTO domicilios (coddomiciliario, direccion, codcliente) VALUES
(1, 'Av. Reforma 123, Ciudad de México', 1),
(2, 'Calle de Vallehermoso 45, Madrid', 2),
(3, 'Avenida Paulista 500, São Paulo', 3),
(4, 'Rue de Rivoli 10, Paris', 4),
(5, '101 Queen Street, Londres', 5),
(6, 'Via della Conciliazione 12, Roma', 6),
(7, '1600 Pennsylvania Ave NW, Washington', 7),
(8, 'Jalan Sudirman 50, Jakarta', 8),
(9, 'Baker Street 221B, Londres', 9),
(10, 'Kreuzbergstraße 78, Berlín', 10);
INSERT INTO ventas (fecha_venta, coddomicilio, codtrabajador) VALUES
('2024-08-01', 3, 5),
('2024-08-02', 6, 8),
('2024-08-03', 2, 1),
('2024-08-04', 7, 4),
('2024-08-05', 4, 6),
('2024-08-06', 5, 3),
('2024-08-07', 8, 9),
('2024-08-08', 1, 7),
('2024-08-09', 9, 2),
('2024-08-10', 10, 10);
-- Insertar en la tabla 'productventa'
INSERT INTO productventa (cantidad_producto, codventa, codproducto, total) VALUES
(2, 1, 1, 1200), -- Laptop Dell (valor: 600, cantidad: 2, total: 1200)
(3, 2, 2, 2100), -- Smartphone Samsung (valor: 700, cantidad: 3, total: 2100)
(1, 3, 3, 1200), -- Televisor LG (valor: 1200, cantidad: 1, total: 1200)
(4, 4, 4, 1200), -- Auriculares Sony (valor: 300, cantidad: 4, total: 1200)
(5, 5, 5, 2500), -- Tablet Apple (valor: 500, cantidad: 5, total: 2500)
(2, 6, 6, 1300), -- Reloj Garmin (valor: 650, cantidad: 2, total: 1300)
(1, 7, 7, 2500), -- Cámara Canon (valor: 2500, cantidad: 1, total: 2500)
(10, 8, 8, 1000), -- Altavoz JBL (valor: 100, cantidad: 10, total: 1000)
(6, 9, 9, 720), -- Teclado Logitech (valor: 120, cantidad: 6, total: 720)
(3, 10, 10, 210); -- Ratón Razer (valor: 70, cantidad: 3, total: 210)
CONSULTAS
Nota
Las que no presentan imagen no dieron resultados, pero su codigo no presenta error
-- Cantidad de productos vendida por cada trabajador-- Hecho
SELECT t.nombre_trabajador, SUM(p.cantidad_producto) as total_vendido
FROM productventa p
inner join ventas v on(v.codventa = p.codventa)
INNER JOIN trabajadores t ON v.codtrabajador = t.codtrabajador
GROUP BY t.nombre_trabajador; -preguntar a profe por cambio—
--Ventas y saber quien las vendio y entrego— cambiar por otro (preguntar por sugerencias al profe)
SELECT v.codventa, v.fecha_venta, v.cantidad_vendida, t.nombre_trabajador, d.nombre_domiciliario
FROM ventas v
INNER JOIN trabajadores t ON v.codtrabajador = t.codtrabajador
LEFT JOIN domiciliarios d ON v.coddomiciliario = d.coddomiciliario;
--ganacias totales— Preguntar al profe para saber como hacerlo. (IMPORTANTE)
Esto es un procedimiento mas que una consulta
SELECT v.fecha_venta, SUM(p.valor * pv.cantidad_producto) as total_ganancias
FROM ventas v
INNER JOIN productventa pv ON v.codventa = pv.codventa
INNER JOIN productos p ON pv.codproducto = p.codproducto
WHERE v.fecha_venta = p_fecha_venta
GROUP BY v.fecha_venta;
--Cuantos productos han entregado los domiciliarios- Hecho
SELECT d.nombre_domiciliario, COUNT(pv.cantidad_producto) as total_productos_entregados
FROM domiciliarios d
INNER JOIN ventas v ON d.coddomiciliario = v.coddomiciliario
INNER JOIN productventa pv ON v.codventa = pv.codventa
Where estado= “activo”
GROUP BY d.coddomiciliario;
--cuantas ventas a entregado un domiciliario— Hecho
SELECT d.nombre_domiciliario, COUNT(v.codventa) as total_ventas_entregadas
FROM domiciliarios d
JOIN ventas v ON d.coddomiciliario = v.coddomiciliario
GROUP BY d.coddomiciliario;
--cuantos pedidos se tiene de un proveedor— Hecho
SELECT pd.nombre_proveedor, COUNT(p.codpedido) as total_pedidos
FROM proveedores pd
JOIN pedidos p ON pr.codproveedor = pd.codproveedor
GROUP BY pd.codproveedor;
--Cuantos productos se han vendido en un dia— Hecho
SELECT p.cantidad_vendida AS productos_vendidos, v.fecha_venta
FROM productventa p
Inner join ventas v on(p.codventa = v.codventa)
WHERE v.fecha_venta LIKE “2024-01-02”
--que cliente ha pedido mas productos en un dia— Hecho
SELECT c.nombre_cliente, v.fecha_venta, SUM(v.cantidad_vendida) AS total_productos
FROM clientes c
INNER JOIN domicilios d ON c.codcliente = d.codcliente
INNER JOIN ventas v ON d.coddomicilio = v.coddomicilio
WHERE v.fecha_venta = '2024-01-01'
GROUP BY c.nombre_cliente, v.fecha_venta
ORDER BY total_productos DESC
LIMIT 1;
-- Cuantos se ha vendido de un producto en especifico
SELECT sum(v.cantidad_vendida) AS cantidad_vendida, p.nombre_producto AS producto_vendido
FROM ventas v
INNER JOIN productventa pv ON (pv.codventa = v.codventa)
INNER JOIN productos p ON (pv.codproducto = p.codproducto)
where p.nombre_producto = “Tablet Apple”
GROUP BY p.nombre_producto;
--Cuantos productos hay en stock- Hecho
select sum(cantidad) as Cantidad_total_productos
from Productos
--Cuantos productos hay en stock producto especifico-
preguntar al profe si se puede hacer una comparación de este único producto con el resto de productos, es decir, por ejemplo comparar la cantidad de sándwich con el total que hay de stock de todas las comidas, no deseo compararlo con solo una.
select sum(cantidad) as Cantidad_total_productos
where nombre_producto = “papas”
from Productos
--Productos con menos stock— Hecho
SELECT nombre_producto, cantidad
FROM productos
ORDER BY cantidad ASC
Limit 5;
--Productos con mas stock -- Hecho
SELECT nombre_producto, cantidad
FROM productos
ORDER BY cantidad desc
Limit 5;
--Productos los cuales no se han vendido— preguntar al profe (se trata de como excluir)
SELECT nombre_producto
FROM productos
WHERE id_producto NOT IN ( SELECT id_producto FROM productventa);