
Resumen
: en este tutorial, aprenderás sobre la cláusula LEFT JOIN de SQL Server y cómo usarla para consultar datos de varias tablas.
Introducción a la cláusula LEFT JOIN de SQL Server
La cláusula LEFT JOIN te permite consultar datos de varias tablas. Devuelve todas las filas de la tabla de la izquierda y las filas coincidentes de la tabla de la derecha. Si no se encuentran filas coincidentes en la tabla de la derecha, se utilizan NULL, otras cláusulas que puedes utilizar para hacer combinaciones entre tablas son INNER JOIN y RIGHT JOIN.
A continuación, se ilustra cómo unir dos tablas T1 y T2 mediante la cláusula LEFT JOIN:
SELECT
select_list
FROM
T1
LEFT JOIN T2 ON
join_predicate;
En esta sintaxis, T1 y T2 son las tablas izquierda y derecha respectivamente.
Para cada fila de la tabla T1, la consulta la compara con todas las filas de la tabla T2. Si un par de filas hace que el predicado de combinación se evalúe como VERDADERO, los valores de columna de estas filas se combinarán para formar una nueva fila que luego se incluirá en el conjunto de resultados.
Si una fila de la tabla de la izquierda (T1) no tiene ninguna fila coincidente de la tabla T2, la consulta combina los valores de columna de la fila de la tabla de la izquierda con NULL para los valores de cada columna de la tabla de la derecha.
En resumen, la cláusula LEFT JOIN devuelve todas las filas de la tabla izquierda (T1) y las filas coincidentes o valores NULL de la tabla derecha (T2).
A continuación, se ilustra la LEFT JOIN de dos tablas T1 (1, 2, 3) y T2 (A, B, C). LEFT JOIN hará coincidir las filas de la tabla T1 con las filas de la tabla T2 usando patrones:
En esta ilustración, ninguna fila de la tabla T2 coincide con la fila 1 de la tabla T1, por lo tanto, se utiliza NULL. Las filas 2 y 3 de la tabla T1 coinciden con las filas A y B de la tabla T2, respectivamente.
Ejemplo de LEFT JOIN de SQL Server
Consulta las siguientes tablas de productos y order_items de la base de datos de pruebas:
Cada order_items de venta incluye un producto. El enlace entre order_items y las tablas de productos es la columna product_id.
La siguiente declaración usa la cláusula LEFT JOIN para consultar datos de las tablas products y order_items:
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
Resultado:
Como puedes ver claramente en el conjunto de resultados, una lista de NULL y IS NULL en la columna order_id indica que los productos correspondientes aún no se han vendido a ningún cliente.
Es posible utilizar la cláusula WHERE para limitar el conjunto de resultados. La siguiente consulta devuelve los productos que no aparecen en ningún pedido de cliente:
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
WHERE order_id IS NULL
ORDER BY
order_id;
Resultado:
Como siempre, SQL Server procesa la cláusula WHERE después de la cláusula LEFT JOIN.
El siguiente ejemplo muestra cómo unir tres tablas: production.products, sales.orders y sales.order_items utilizando las cláusulas LEFT JOIN:
SELECT
p.product_name,
o.order_id,
i.item_id,
o.order_date
FROM
production.products p
LEFT JOIN sales.order_items i
ON i.product_id = p.product_id
LEFT JOIN sales.orders o
ON o.order_id = i.order_id
ORDER BY
order_id;
Resultado:
SQL Server LEFT JOIN: condiciones en la cláusula ON contra WHERE
La siguiente consulta busca los productos que pertenecen al ID 100:
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o
ON o.product_id = p.product_id
WHERE order_id = 100
ORDER BY
order_id;
Resultado:
Movamos la condición order_id = 100 a la cláusula ON:
SELECT
p.product_id,
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o
ON o.product_id = p.product_id AND
o.order_id = 100
ORDER BY
order_id DESC;
Resultado:
La consulta devolvió todos los productos, pero solo el pedido con id 100 tiene la información del producto asociado.
Ten en cuenta que para la cláusula INNER JOIN, la condición en la cláusula ON es funcionalmente equivalente si se coloca en la cláusula WHERE.
En este tutorial, has aprendido a utilizar la cláusula LEFT JOIN de SQL Server para recuperar datos de varias tablas relacionadas.