INSTRUCCIONES INNER JOIN, LEFT JOIN, RIGHT JOIN

SQL TRANSACT: Consultas Multitablas

Como crear consultas de varias tablas usando las instrucciones «inner Join», «Left join», «right join», «cross join».


Los JOINS en SQL se utilizan para combinar filas de dos o más tablas basándose en una columna relacionada entre ellas. Aquí tienes una explicación sencilla de los tipos de JOIN más comunes:

INNER JOIN

Este tipo de JOIN devuelve solo las filas que tienen coincidencias en ambas tablas. Es como si solo te mostrara las filas que tienen datos en común en ambas tablas.

Ejemplo:

Supongamos que tienes dos tablas: Clientes y Pedidos.

  • Clientes:
    ClienteID Nombre
    1 Juan Pérez
    2 Ana García
    3 Luis López
  • Pedidos:
    PedidoID ClienteID Producto
    101 1 Televisor
    102 2 Lavadora
    103 4 Microondas

El INNER JOIN mostraría solo los clientes que tienen pedidos:

SELECT Clientes.Nombre, Pedidos.Producto
FROM Clientes
INNER JOIN Pedidos ON Clientes.ClienteID = Pedidos.ClienteID;

Resultado:

Nombre Producto
Juan Pérez Televisor
Ana García Lavadora

LEFT JOIN (o LEFT OUTER JOIN)

Este tipo de JOIN devuelve todas las filas de la tabla de la izquierda (en este caso, Clientes) y las filas coincidentes de la tabla de la derecha (Pedidos). Si no hay coincidencia, se muestran valores nulos en las columnas de la tabla de la derecha.

Ejemplo:

SELECT Clientes.Nombre, Pedidos.Producto
FROM Clientes
LEFT JOIN Pedidos ON Clientes.ClienteID = Pedidos.ClienteID;

Resultado:

Nombre Producto
Juan Pérez Televisor
Ana García Lavadora
Luis López NULL

RIGHT JOIN (o RIGHT OUTER JOIN)

Este tipo de JOIN es lo opuesto al LEFT JOIN. Devuelve todas las filas de la tabla de la derecha (Pedidos) y las filas coincidentes de la tabla de la izquierda (Clientes). Si no hay coincidencia, se muestran valores nulos en las columnas de la tabla de la izquierda.

Ejemplo

SELECT Clientes.Nombre, Pedidos.Producto
FROM Clientes
RIGHT JOIN Pedidos ON Clientes.ClienteID = Pedidos.ClienteID;

Resultado:

Nombre Producto
Juan Pérez Televisor
Ana García Lavadora
NULL Microondas

FULL JOIN (o FULL OUTER JOIN)

Este tipo de JOIN devuelve todas las filas cuando hay una coincidencia en una de las tablas. Devuelve filas de la tabla de la izquierda y de la derecha, rellenando con valores nulos donde no hay coincidencia.

Ejemplo:

SELECT Clientes.Nombre, Pedidos.Producto
FROM Clientes
FULL JOIN Pedidos ON Clientes.ClienteID = Pedidos.ClienteID;

Resultado:

Nombre Producto
Juan Pérez Televisor
Ana García Lavadora
Luis López NULL
NULL Microondas

CROSS JOIN

Este tipo de JOIN devuelve el producto cartesiano de las dos tablas, es decir, combina cada fila de la primera tabla con todas las filas de la segunda tabla. No es comúnmente usado para tareas de consulta normales.

Ejemplo:

SELECT Clientes.Nombre, Pedidos.Producto
FROM Clientes
CROSS JOIN Pedidos;

Resultado:

Nombre Producto
Juan Pérez Televisor
Juan Pérez Lavadora
Juan Pérez Microondas
Ana García Televisor
Ana García Lavadora
Ana García Microondas
Luis López Televisor
Luis López Lavadora
Luis López Microondas

SELF JOIN

Un SELF JOIN es simplemente un JOIN de una tabla consigo misma. Es útil cuando se quiere comparar filas dentro de la misma tabla.

Ejemplo:

Supongamos que tienes una tabla Empleados con EmpleadoID, Nombre, y JefeID (que es el EmpleadoID de su jefe).

  • Empleados:
    EmpleadoID Nombre JefeID
    1 Juan Pérez NULL
    2 Ana García 1
    3 Luis López 1
    4 María Gómez 2

Para encontrar los nombres de los empleados y sus jefes:

SELECT A.Nombre AS Empleado, B.Nombre AS Jefe
FROM Empleados A
LEFT JOIN Empleados B ON A.JefeID = B.EmpleadoID;

Resultado:

Empleado Jefe
Juan Pérez NULL
Ana García Juan Pérez
Luis López Juan Pérez
María Gómez Ana García

Espero que esta explicación te haya sido útil abajo tienes un script para pegarlo en el SQL Managment studio y repasar.

use northwind
–Inner Join
Select c.customerid, c.companyname
, o.orderid, o.orderdate
from customers as c inner join orders as o
on c.customerid=o.customerid
–left Join
Select c.customerid, c.companyname
, o.orderid, o.orderdate
from customers as c left outer join orders as o
on c.customerid=o.customerid
where OrderID is null
–right Join
Select c.customerid, c.companyname
, o.orderid, o.orderdate
from orders as o right outer join customers as c
on c.customerid=o.customerid
where OrderID is null
–cross join
Select c.customerid, c.companyname
, o.orderid, o.orderdate
from orders as o cross join customers as c
–union de varias tablas
Select c.customerid, c.companyname
, o.orderid, o.orderdate, p.ProductName
,od.Quantity, od.UnitPrice
from customers as c inner join orders as o
on c.customerid=o.customerid
inner join [Order Details] as od
on o.OrderID=od.OrderID
inner join products as p
on od.ProductID=p.ProductID

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.