-- Crear una base de datos y tablas para los ejemplos
CREATE DATABASE Tienda;
-- Tabla Clientes
CREATE TABLE Clientes (
ClienteID INT PRIMARY KEY,
Nombre VARCHAR(50)
);
-- Tabla Pedidos
CREATE TABLE Pedidos (
PedidoID INT PRIMARY KEY,
ClienteID INT,
Fecha DATE,
Monto DECIMAL(10, 2),
FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID)
);
-- Insertar datos en la tabla Clientes
INSERT INTO Clientes (ClienteID, Nombre)
VALUES
(1, 'Juan'),
(2, 'Ana'),
(3, 'Pedro');
-- Insertar datos en la tabla Pedidos
INSERT INTO Pedidos (PedidoID, ClienteID, Fecha, Monto)
VALUES
(1, 1, '2023-01-15', 100.00),
(2, 2, '2023-01-16', 150.00),
(3, 1, '2023-01-17', 200.00),
(4, 3, '2023-01-18', 250.00),
(5, 2, '2023-01-19', 300.00);
-- INNER JOIN
-- Seleccionar pedidos junto con la información del cliente
SELECT Pedidos.PedidoID, Clientes.Nombre, Pedidos.Fecha, Pedidos.Monto
FROM Pedidos
INNER JOIN Clientes ON Pedidos.ClienteID = Clientes.ClienteID;
-- LEFT JOIN
-- Seleccionar todos los clientes y sus pedidos (si existen)
SELECT Clientes.ClienteID, Clientes.Nombre, Pedidos.PedidoID, Pedidos.Fecha, Pedidos.Monto
FROM Clientes
LEFT JOIN Pedidos ON Clientes.ClienteID = Pedidos.ClienteID;
-- RIGHT JOIN
-- Seleccionar todos los pedidos y la información del cliente (si existe)
SELECT Pedidos.PedidoID, Pedidos.Fecha, Pedidos.Monto, Clientes.Nombre
FROM Pedidos
RIGHT JOIN Clientes ON Pedidos.ClienteID = Clientes.ClienteID;
-- FULL JOIN
-- Seleccionar todos los clientes y todos los pedidos, combinando cuando sea posible
SELECT Clientes.ClienteID, Clientes.Nombre, Pedidos.PedidoID, Pedidos.Fecha, Pedidos.Monto
FROM Clientes
FULL JOIN Pedidos ON Clientes.ClienteID = Pedidos.ClienteID;
-- CROSS JOIN
-- Seleccionar todas las combinaciones posibles de clientes y pedidos
SELECT Clientes.Nombre, Pedidos.PedidoID, Pedidos.Fecha, Pedidos.Monto
FROM Clientes
CROSS JOIN Pedidos;
Relaciones entre Tablas:
Clientes
y Pedidos
. La relación entre estas tablas se establece a través de la columna ClienteID
, que actúa como clave primaria en la tabla Clientes
y como clave foránea en la tabla Pedidos
. Esto permite relacionar los pedidos con los clientes que los realizaron.INNER JOIN:
SELECT Pedidos.PedidoID, Clientes.Nombre, Pedidos.Fecha, Pedidos.Monto FROM Pedidos INNER JOIN Clientes ON Pedidos.ClienteID = Clientes.ClienteID;
INNER JOIN
selecciona registros que tienen valores coincidentes en ambas tablas. En este caso, selecciona los pedidos junto con la información del cliente que realizó cada pedido.LEFT JOIN:
SELECT Clientes.ClienteID, Clientes.Nombre, Pedidos.PedidoID, Pedidos.Fecha, Pedidos.Monto FROM Clientes LEFT JOIN Pedidos ON Clientes.ClienteID = Pedidos.ClienteID;
LEFT JOIN
selecciona todos los registros de la tabla izquierda (Clientes) y los registros coincidentes de la tabla derecha (Pedidos). Si no hay coincidencias, los resultados de la tabla derecha serán NULL
. En este caso, selecciona todos los clientes y sus pedidos (si existen).RIGHT JOIN:
SELECT Pedidos.PedidoID, Pedidos.Fecha, Pedidos.Monto, Clientes.Nombre FROM Pedidos RIGHT JOIN Clientes ON Pedidos.ClienteID = Clientes.ClienteID;
RIGHT JOIN
selecciona todos los registros de la tabla derecha (Clientes) y los registros coincidentes de la tabla izquierda (Pedidos). Si no hay coincidencias, los resultados de la tabla izquierda serán NULL
. En este caso, selecciona todos los pedidos y la información del cliente (si existe).FULL JOIN:
SELECT Clientes.ClienteID, Clientes.Nombre, Pedidos.PedidoID, Pedidos.Fecha, Pedidos.Monto FROM Clientes FULL JOIN Pedidos ON Clientes.ClienteID = Pedidos.ClienteID;
FULL JOIN
devuelve todos los registros cuando hay una coincidencia en cualquiera de las tablas. Si no hay coincidencias, se devuelven NULL
en las tablas sin coincidencias. En este caso, selecciona todos los clientes y todos los pedidos, combinando cuando sea posible.CROSS JOIN:
SELECT Clientes.Nombre, Pedidos.PedidoID, Pedidos.Fecha, Pedidos.Monto FROM Clientes CROSS JOIN Pedidos;
CROSS JOIN
devuelve el producto cartesiano de las tablas involucradas. Esto significa que combina todas las filas de la tabla Clientes
con todas las filas de la tabla Pedidos
. En este caso, selecciona todas las combinaciones posibles de clientes y pedidos.Estos tipos de joins son fundamentales para combinar y relacionar datos en SQL, permitiéndote realizar consultas más complejas y obtener información valiosa a partir de múltiples tablas.