# JOINS 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. ## INNER 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. ![](assets/20220116_191801_img_innerjoin.gif) *Sintaxis* ``` SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name; ``` ### Implementación *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 ``` ## LEFT JOIN 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. ![](assets/20220116_192640_img_leftjoin.gif) *Sintaxis* ``` SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name; ``` ## RIGHT JOIN 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. ![](assets/20220116_192835_img_rightjoin.gif) *Sintaxis* ``` SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name; ``` ## OUTER JOIN o FULL OUTER JOIN 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. ![](assets/20220116_204403_img_fulljoin.gif) *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