# crear tabla marca "Brands"
CREATE TABLE BRANDS (
BRAND_ID INT PRIMARY KEY AUTO_INCREMENT,
BRAND_NAME VARCHAR(100) NOT NULL
);
-- Insertar registros en la tabla BRANDS
INSERT INTO BRANDS (BRAND_NAME)
VALUES
('Nike'),
('Adidas'),
('Puma'),
('Under Armour'),
('Reebok');
-- Verificar los registros en la tabla BRANDS
SELECT * FROM BRANDS;
#crear tabla de productos "products"
CREATE TABLE PRODUCTS (
PRODUCTSID INT PRIMARY KEY AUTO_INCREMENT,
PRODUCTS_NAME VARCHAR(50),
BRAND_ID INT, -- Supongamos que ahora haces referencia a una tabla de marcas
PRICE DECIMAL(10, 2),
LOAD_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UPDATE_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- Se actualiza automáticamente
FOREIGN KEY (BRAND_ID) REFERENCES BRANDS(BRAND_ID) -- Clave foránea para garantizar integridad referencial de este campo con la tabla BRANDS.
);
-- Insertar registros en la tabla PRODUCTS
INSERT INTO PRODUCTS (PRODUCTS_NAME, BRAND_ID, PRICE)
VALUES
('Zapatillas Air Max', 1, 120.50),
('Camiseta Clásica', 2, 30.99),
('Botines EvoSpeed', 3, 150.00),
('Short Deportivo', 4, 25.75),
('Guantes de Entrenamiento', 5, 40.00);
-- Verificar los registros en la tabla PRODUCTS
SELECT * FROM PRODUCTS;
-- práctica de "Joins"
-- INNER JOIN: El INNER JOIN se utiliza para devolver los registros que tienen coincidencias en ambas tablas basadas en una condición, generalmente una clave foránea.
-- Esta consulta te mostrará todos los productos junto con los nombres de sus marcas.
SELECT *
FROM PRODUCTS
INNER JOIN BRANDS ON PRODUCTS.BRAND_ID = BRANDS.BRAND_ID;
-- seleccionar columnas específica
SELECT PRODUCTS.PRODUCTS_NAME, BRANDS.BRAND_NAME, PRODUCTS.PRICE
FROM PRODUCTS
INNER JOIN BRANDS ON PRODUCTS.BRAND_ID = BRANDS.BRAND_ID;
-- Explicación línea por línea:
-- SELECT *: Este comando selecciona todas las columnas de ambas tablas (PRODUCTS y BRANDSS). El asterisco (*) indica que se seleccionarán todas las columnas sin necesidad de especificarlas una por una.
-- FROM PRODUCTOS: Especifica que la tabla principal de la consulta es PRODUCTS. Aquí es donde se va a buscar la información de los productos.
-- INNER JOIN MARCAS: Realiza un INNER JOIN entre la tabla PRODUCTS y BRANDS. Esto significa que solo se mostrarán los registros que tienen coincidencias en ambas tablas.
-- ON PRODUCTS.BRAND_ID = BRAND.ID: Especifica la condición de unión. Aquí se indica que el campo BRAND_ID de la tabla PRODUCTS debe coincidir con el campo ID de la tabla BRANDS. De esta forma, relacionas cada producto con su marca correspondiente.
-- LEFT JOIN: Retorna todas las filas de la tabla de la izquierda (en este caso, PRODUCTS) y las coincidencias de la tabla de la derecha (BRANDS). Si no hay coincidencia, se devolverán valores NULL para las columnas de la tabla de la derecha.
SELECT PRODUCTS.PRODUCTS_NAME, BRANDS.BRAND_NAME, PRODUCTS.PRICE
FROM PRODUCTS
LEFT JOIN BRANDS ON PRODUCTS.BRAND_ID = BRANDS.BRAND_ID;
-- RIGHT JOIN: Retorna todas las filas de la tabla de la derecha (BRANDS) y las coincidencias de la tabla de la izquierda (PRODUCTS). Si no hay coincidencia, se devolverán valores NULL para las columnas de la tabla de la izquierda.
SELECT PRODUCTS.PRODUCTS_NAME, BRANDS.BRAND_NAME, PRODUCTS.PRICE
FROM PRODUCTS
RIGHT JOIN BRANDS ON PRODUCTS.BRAND_ID = BRANDS.BRAND_ID;
-- FULL OUTER JOIN! Este tipo de unión te permitirá ver todos los registros de ambas tablas, sin importar si hay coincidencias entre ellas. Los valores que no tengan coincidencia en la otra tabla se mostrarán como NULL.
-- SELECT PRODUCTS.PRODUCTS_NAME, BRANDS.BRAND_NAME, PRODUCTS.PRICE
-- FROM PRODUCTS
-- FULL OUTER JOIN BRANDS ON PRODUCTS.BRAND_ID = BRANDS.BRAND_ID;
-- MySQL no tiene soporte directo para el FULL OUTER JOIN, pero podemos emular su comportamiento utilizando una combinación de LEFT JOIN y RIGHT JOIN con la cláusula UNION.
SELECT PRODUCTS.PRODUCTS_NAME, BRANDS.BRAND_NAME, PRODUCTS.PRICE
FROM PRODUCTS
LEFT JOIN BRANDS ON PRODUCTS.BRAND_ID = BRANDS.BRAND_ID
UNION
SELECT PRODUCTS.PRODUCTS_NAME, BRANDS.BRAND_NAME, PRODUCTS.PRICE
FROM PRODUCTS
RIGHT JOIN BRANDS ON PRODUCTS.BRAND_ID = BRANDS.BRAND_ID;
-- El CROSS JOIN es un tipo de JOIN que devuelve el producto cartesiano de dos tablas. Esto significa que combina cada fila de la primera tabla con cada fila de la segunda tabla. Es útil cuando deseas crear todas las combinaciones posibles de registros entre dos tablas
SELECT PRODUCTS.PRODUCTS_NAME, BRANDS.BRAND_NAME
FROM PRODUCTS
CROSS JOIN BRANDS;