El INNER JOIN es un tipo de JOIN en SQL que se usa para combinar filas de dos o más tablas basándose en una condición común. Devuelve solo aquellas filas donde haya coincidencias en ambas tablas según la condición especificada en la cláusula ON.
SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1, tabla2.columna2
FROM tabla1
INNER JOIN tabla2 ON tabla1.columna_comun = tabla2.columna_comun;
tabla1
y tabla2
: Son las tablas que se unirán.columna_comun
: Es la columna que existe en ambas tablas y que se usará para unirlas.Supongamos que tenemos dos tablas:
Tabla clientes
id_cliente | nombre |
---|---|
1 | Juan |
2 | María |
3 | Pedro |
Tabla pedidos
id_pedido | id_cliente | producto |
---|---|---|
101 | 1 | Laptop |
102 | 2 | Teléfono |
103 | 4 | Tablet |
Ahora usamos un INNER JOIN para obtener solo los clientes que han realizado pedidos:
SELECT clientes.id_cliente, clientes.nombre, pedidos.id_pedido, pedidos.producto
FROM clientes
INNER JOIN pedidos ON clientes.id_cliente = pedidos.id_cliente;
Resultado:
id_cliente | nombre | id_pedido | producto |
---|---|---|---|
1 | Juan | 101 | Laptop |
2 | María | 102 | Teléfono |
pedidos
.id_cliente = 4
en la tabla clientes
.Tipo de JOIN | Descripción |
---|---|
INNER JOIN | Solo devuelve filas con coincidencias en ambas tablas. |
LEFT JOIN | Devuelve todas las filas de la primera tabla y las coincidencias de la segunda (si no hay coincidencia, muestra NULL). |
RIGHT JOIN | Devuelve todas las filas de la segunda tabla y las coincidencias de la primera (si no hay coincidencia, muestra NULL). |
FULL JOIN | Devuelve todas las filas cuando hay coincidencia en una de las tablas o en ambas (si no hay coincidencia, muestra NULL). |
SELECT * FROM regiones r
inner JOIN provincias p ON r.id = p.fk_region
UNION
SELECT * FROM regiones r, provincias p
where r.id = p.fk_region
/* Saca un listado con todos los CNAE y cuenta cuantos clientes tiene cada CNAE (Utiliza JOIN) */
SELECT cn.codigo, COUNT(cl.id) num_clientes
FROM cnae cn LEFT JOIN clientes cl
ON cl.fk_cnae = cn.id
GROUP BY cn.id
/* muestra TODOS los clientes y cuenta cuantas campañas tiene cada uno */
SELECT c.nombre, COUNT(ca.id)
FROM clientes C left JOIN campanas ca
ON c.id = ca.fk_cliente
GROUP BY c.id
ORDER BY 2 desc