Unjoines una combinacin de dos o ms tablas de una base de
datos relacional, es una instruccin de lo ms imprescindible si queremos realizar una aplicacin que realice un uso correcto e intensivo de un gestor de Bases de datos cmo MySQL.
Y es que gracias a los JOIN podemos leer datos de diferentes
bases de datos en una nica consulta. Lo que nos permitir disear fcilmente tablas relacionadas entre ellas.
mysql> select * from
clientes; +------+--------+----------+ | cid | nombre | telefono | +------+--------+----------+ | 1 | jose | 111| | 2 | maria | 222 | | 3 | manuel | 333 | | 4 | jesus | 4444| +------+--------+----------+ 4 rows in set (0.00 sec)
MySQL soportamuchas sintaxis diferentespara la instruccin
JOIN en comandos de SELECT, DELETE y UPDATE. Escribiremos la instruccin de JOIN en el apartado de referncia de tablas ( el WHERE ) de nuestra consulta SQL, escojeremos la sintaxis de JOIN de las mencionadas anteriormente segn el tipo de JOIN que queramos realizar.
INNER JOIN ,
El JOIN nos permitir obtener un listado de los campos que tienen
coincidencias en ambas tablas.
mysql> select nombre, telefono, accion, cantidad from clientes
join acciones on clientes.cid=acciones.cid;
+--------+----------+--------+----------+------------------| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+------------------| maria | 222 | REDHAT| 10 | | jesus | 4444 | NOVELL| 20 | | jesus | 4444 | SUN | 30 | +--------+----------+--------+----------+------------------3 rows in set (0.00 sec)
LEFT JOIN
La sentencia LEFT JOIN nos dar el resultado anterior mas los
campos de la tabla clientes que no tienen coincidencias. mysql> select nombre, telefono, accion, cantidad from clientes left join acciones on clientes.cid=acciones.cid; +--------+----------+--------+----------+ | nombre | telefono | accion | cantidad | +--------+----------+--------+----------+ | jose | 111 | NULL | NULL | | maria | 222 | REDHAT | 10 | | manuel | 333 | NULL | NULL | | jesus | 4444 | NOVELL | 20 | | jesus | 4444 | SUN | 30 | +--------+----------+--------+----------+ 5 rows in set (0.00 sec)
RIGTH JOIN
Aqu se listarn todas las tenencias de acciones, tengan o no
cliente, las que no tengan cliente se vern como NULL (como es el caso de aid=4)
mysql> select nombre, telefono, accion, cantidad from clientes
right join acciones on clientes.cid=acciones.cid; +--------+----------+--------+----------+ | nombre | telefono | accion | cantidad | +--------+----------+--------+----------+ | maria | 222 | REDHAT| 10 | | jesus | 4444 | NOVELL| 20 | | jesus | 4444 | SUN | 30 | | NULL | NULL | FORD | 100 | +--------+----------+--------+----------+ 4 rows in set (0.00 sec)
Otros ejemplos
mysql> select nombre, telefono, accion, cantidad from clientes
left join acciones on clientes.cid=acciones.cid where accion is null;
+--------+----------+--------+----------+------------------| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+------------------| jose | 111 | NULL | NULL | | manuel | 333 | NULL | NULL | +--------+----------+--------+----------+ 2 rows in set (0.00 sec)
UNION y UNION ALL
mysql> select nombre, telefono, accion, cantidad from clientes
left join acciones on clientes.cid=acciones.cid where accion is null union select nombre, telefono, accion, cantidad from clientes right join acciones on clientes.cid=acciones.cid where nombre is null; +--------------+--------------+------------+----------------+ | nombre | telefono | accion | cantidad | +--------------+-------------+-------------+----------------+ | jose | 111 | NULL | NULL | | manuel | 333 | NULL | NULL | | NULL | NULL | FORD | 100 | +--------------+-------------+-------------+---------------+ 3 rows in set (0.02 sec)