Los join se usan para recuperar datos de varias tablas al mismo tiempo y las tablas tienen que estar relacionadas de algún modo, normalmente mediante un id.
En Mysql, como en la mayoría de las bases de datos relacionales hay diferentes tipos de join.
También se puede usar como join sin nada más. En este caso la sentencia va a devolver los datos que existen las dos tablas que se comparan.
Sintaxis
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
Sintaxis
select c.id, c.nombre, c.categoria_id ,c2.nombre from categorias c
join categorias c2 on c2.id = c.categoria_id
Tambien se pueden relacionar mas de dos tablas
select *
from categorias c
join categoria_producto cp on c.id = cp.categoria_id
join productos p on p.id = cp.producto_id
En este caso la sentencia va a devolver los datos que tiene en la primera tabla con los datos que tiene en común con la segunda tabla.
Sintaxis
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
Este caso es como el anterior pero a la inversa, la sentencia va a devolver los datos que tiene en la segunda tabla con los datos que tiene en común con la primera tabla.
Sintaxis
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
En este caso se recuperan todos los datos de ambas tablas. Este tipo de join no es compatible con MySQL y para conseguir un OUTER JOIN hay que usar la unión de sentencias con UNION del INNER JOIN y del LEFT JOIN.En MySQL los UNION tienen que tener el mismo número de campos en el SELECT sino dará error.
Sintaxis
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;
Para implementarlo en MYSQl tendriamos que usar la union del left join y del right join