Se puede usar el siguiente código para ejemplificar el uso de INNER JOIN.
CREATE TABLE clientes (
idcliente int NOT NULL primary key,
nombre varchar(20) NOT NULL,
apellido varchar(30) NOT NULL,
direccion varchar(100) NOT NULL,
ciudad varchar(50) NOT NULL,
telefono numeric(10) NULL,
);
CREATE TABLE ordenes(
id_orden int NOT NULL primary key,
idcliente int foreign key references clientes(idcliente),
fecha_orden date default getdate(),
id_vendedor int NOT NULL
);
SELECT ordenes.id_orden, Clientes.nombre, Clientes.apellido, ordenes.fecha_orden -- De
la tabla ordenes elige el id de la orden, de la tabla de clientes el nombre y el
apellido y de la tabla de ordenes la fecha
FROM ordenes -- Para esto, usa la tabla de ordenes
INNER JOIN Clientes on ordenes.idcliente = Clientes.idCliente; -- y por medio un inner
JOIN con la tabla Clientes trae esos campos CUANDO el id del cliente de la tabla de
ordenes sea el mismo id del cliente en la tabla de Clientes
SELECT ordenes.id_orden, Clientes.nombre, Clientes.apellido, ordenes.fecha_orden,
ordenes.id_vendedor -- También podemos traer el id del vendedor para saber quien le ha
vendido productos al cliente Juan
FROM ordenes
INNER JOIN Clientes ON ordenes.idcliente = Clientes.idCliente
WHERE nombre = 'Juan' ORDER BY fecha_orden; -- Realizamos la misma consulta anterior
pero filtrando para el cliente con nombre Juan y ordenamos por fecha
Este código se puede ver de otra manera: Se toma cada registro de la
tabla de ordenes y se checa con qué cliente está asociado esa orden por medio del id del
cliente, después de esta verificación se van a devolver el nombre y el apellido en la tabla de
clientes pero también el id de la orden y la fecha de la orden en la tabla de ordenes, estos
campos se devuelven para cada uno de los registros de la tabla de ordenes.
Si se desea saber cuáles clientes tienen ordenes de servicio y cuáles no las tienen, se puede hacer uso de left join porque de esta manera podemos obtener aquellos registros que están relacionados con la tabla de ordenes pero también aquellos que no están relacionados, esto cumple con la definición de left join que devuelve los propios registros de la tabla izquierda y también sus coincidencias con respecto a otra tabla con la que está relacionada.
El siguiente ejemplo de código muestra cómo se puede usar left join para solucionar el problema previamente explicado.
SELECT Clientes.nombre, Clientes.apellido, ordenes.id_orden, ordenes.fecha_orden -- Devuelve el nombre y el apellido de la tabla Clientes y el id de orden y la fecha de
la tabla de ordenes
FROM Clientes --(Clientes es la tabla de la izquierda o primer tabla) Para esto, usa la tabla de ordenes
LEFT JOIN ordenes on Clientes.idcliente = ordenes.idcliente -- y por medio un left join con la tabla ordenes trae esos campos CUANDO el id del cliente de la tabla de ordenes sea el mismo id del cliente en la tabla de Clientes
order by id_orden; -- ordena la consulta por el id de la orden
SELECT cli.nombre, cli.apellido, ord.id_orden, ord.fecha_orden
FROM Clientes cli -- La tabla Clientes usa 'cli' como alias
LEFT JOIN ordenes ord on cli.idcliente = ord.idcliente -- La tabla ordenes usa 'ord' como alias
order by id_orden;
Referencias
Para obtener más información sobre las uniones, consultar el siguiente enlace.