Blog de Gonzalo

JOINS EN MYSQL

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:
Vamos a suponer que tenemos una tienda online co una tabla usuarios y una tabla pedidos.

  • 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. Un ejemplo sería obtener el nombre de todos los usuarios con pedisos y el total del pedido:
    
    SELECT usuarios.nombre,pedidos.total_pedido
    FROM usuarios
    INNER JOIN pedidos ON usuarios.usuario_id = pedidos.usuario_id
    

  • LEFT JOIN:En este caso la sentencia va a devolver los datos que tiene en la primera tabla (usuarios) con los datos que tiene en común con la segunda tabla (pedidos). Un ejemplo de LEFT JOIN sería si tenemos dos tablas de usuarios y pedidos y queremos sacar todos los usuarios que tengan pedidos, y sus pedidos, y los usuarios que no tengan pedidos.
    
    SELECT usuarios.nombre,pedidos.total_pedido
    FROM usuarios
    LEFT JOIN pedidos ON usuarios.usuario_id = pedidos.usuario_id
    

  • 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 (pedidos) con los datos que tiene en común con la primera tabla (productos). Un ejemplo de RIGHT JOIN sería si tenemos dos tablas de pedidos y productos y queremos sacar todos los productos y los pedidos asociados, si los tienen.
    
    SELECT producto.nombre,pedidos.total_pedido
    FROM productos
    RIGHT JOIN productos ON productos.producto_id = pedidos.usuario_id
    

  • 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 campso en el SELECT sino dará error.

Espero que os ayude. Yo por ahora solo he usado el INNER JOIN y del LEFT JOIN y UNION pero no para conseguir OUTER JOIN sino por otras necesidades. Os aconsejo leeros mi post: using en joins.

Compartir en twitter