-- create a table
CREATE TABLE Clientes (
    cliente_id INT PRIMARY KEY,
    nombre VARCHAR(50),
    email VARCHAR(50)
);

CREATE TABLE Productos (
    producto_id INT PRIMARY KEY,
    nombre_producto VARCHAR(50),
    precio DECIMAL(10, 2)
);

CREATE TABLE Pedidos (
    pedido_id INT PRIMARY KEY,
    cliente_id INT,
    producto_id INT,
    cantidad INT,
    fecha_pedido DATE,
    FOREIGN KEY (cliente_id) REFERENCES Clientes(cliente_id),
    FOREIGN KEY (producto_id) REFERENCES Productos(producto_id)
);

-- 2. INSERCIÓN DE DATOS DE PRUEBA

INSERT INTO Clientes VALUES
(1, 'Ana Gómez', 'ana@email.com'),
(2, 'Carlos López', 'carlos@email.com'),
(3, 'María Rodríguez', 'maria@email.com'),
(4,'Sophie Ritondo','sophie@gmail.com'),
(5,'Solange Lopez','solange@gmail.com'),
(6,'Olivier Ricardo','olivier@gmail.com'),
(7,'Nadine Sanchez','nadine@gmail.com'),
(8,'Suzanne Ferez','suzanne@gmail.com'),
(9,'Frank Sinatra','frank@gmail.com');


INSERT INTO Productos VALUES
(101, 'Laptop', 850.00),
(102, 'Ratón Óptico', 15.50),
(103, 'Teclado Mecánico', 45.00),
(104, 'Monitor 24 pulgadas', 160.00);

INSERT INTO Pedidos VALUES
(1, 1, 101, 1, '2026-09-10'),
(2, 1, 102, 2, '2026-09-12'),
(3, 2, 103, 1, '2026-09-15'),
(4,2,104,2,'2026-09-20');

-- 3. CONSULTAS SQL UTILIZANDO JOIN

-- EJEMPLO 1: INNER JOIN
-- Obtiene el detalle de las compras: qué cliente compró qué producto.
SELECT '--- EJEMPLO 1: INNER JOIN ---';
SELECT
    Clientes.nombre AS Cliente,
    Productos.nombre_producto AS Producto,
    Pedidos.cantidad AS Cantidad,
    Pedidos.fecha_pedido AS Fecha
FROM Pedidos
INNER JOIN Clientes ON Pedidos.cliente_id = Clientes.cliente_id
INNER JOIN Productos ON Pedidos.producto_id = Productos.producto_id;

-- EJEMPLO 2: LEFT JOIN
-- Muestra TODOS los clientes y sus compras (si no han comprado nada, aparece NULL)
SELECT '--- EJEMPLO 1: LEFT JOIN ---';
SELECT
    Clientes.nombre AS Cliente,
    Pedidos.pedido_id AS Numero_Pedido,
    Pedidos.fecha_pedido AS Fecha
FROM Clientes
LEFT JOIN Pedidos ON Clientes.cliente_id = Pedidos.cliente_id;

-- EJEMPLO 3: RIGHT JOIN / LEFT JOIN INVERSO (Compatible con todos los motores)
-- Muestra TODOS los productos, incluso los que nunca se han vendido (como el Monitor)
SELECT '--- EJEMPLO 1: RIGHT JOIN ---';
SELECT
    Productos.nombre_producto AS Producto,
    Productos.precio AS Precio,
    Pedidos.cantidad AS Cantidad_Vendida
FROM Productos
LEFT JOIN Pedidos ON Productos.producto_id = Pedidos.producto_id;

--Ejemplo 4 CONSULTA CON CÁLCULO Y AGRUPACIÓN
SELECT
    Clientes.nombre AS Cliente,
    SUM(Productos.precio * Pedidos.cantidad) AS Total_Gastado
FROM Clientes
INNER JOIN Pedidos
    ON Clientes.cliente_id = Pedidos.cliente_id
INNER JOIN Productos
    ON Pedidos.producto_id = Productos.producto_id
GROUP BY Clientes.cliente_id, Clientes.nombre;
-- Ejemplo 5 FILTRADO CON WHERE TRAS UN JOIN
SELECT
    Clientes.nombre AS Cliente,
    Productos.nombre_producto AS Producto,
    Productos.precio AS Precio
FROM Clientes
INNER JOIN Pedidos
    ON Clientes.cliente_id = Pedidos.cliente_id
INNER JOIN Productos
    ON Pedidos.producto_id = Productos.producto_id
WHERE Productos.precio > 30;
-- Ejemplo 6 IDENTIFICAR CLIENTES SIN COMPRAS (LEFT JOIN + WHERE IS NULL)
SELECT
    Clientes.cliente_id,
    Clientes.nombre,
    Clientes.email
FROM Clientes
LEFT JOIN Pedidos
    ON Clientes.cliente_id = Pedidos.cliente_id
WHERE Pedidos.pedido_id IS NULL;
--Ejemplo 7 IDENTIFICAR PRODUCTOS NUNCA VENDIDOS (LEFT JOIN + WHERE IS NULL)
SELECT
    Productos.producto_id,
    Productos.nombre_producto,
    Productos.precio
FROM Productos
LEFT JOIN Pedidos
    ON Productos.producto_id = Pedidos.producto_id
WHERE Pedidos.pedido_id IS NULL;
--EJEMPLO 8 CONTEO DE PEDIDOS POR CLIENTE (COUNT, GROUP BY, LEFT JOIN)
SELECT
    Productos.nombre_producto AS Producto,
    COALESCE(SUM(Pedidos.cantidad), 0) AS Total_Unidades
FROM Productos
LEFT JOIN Pedidos
    ON Productos.producto_id = Pedidos.producto_id
GROUP BY Productos.producto_id, Productos.nombre_producto;
-- Ejemplo 9 TOTAL DE UNIDADES VENDIDAS POR PRODUCTO
SELECT
    Clientes.nombre AS Cliente,
    MAX(Productos.precio) AS Precio_Mas_Alto
FROM Clientes
INNER JOIN Pedidos
    ON Clientes.cliente_id = Pedidos.cliente_id
INNER JOIN Productos
    ON Pedidos.producto_id = Productos.producto_id
GROUP BY Clientes.cliente_id, Clientes.nombre;

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: