Cuando queremos recuperar información de dos o más tablas, vamos a crear un cruce entre ambas tablas, de tal manera que recojamos la información que queramos de cada una de las tablas, de la siguiente manera. Para ello existe un comando denominado JOIN. Para que podamos utilizar este comando tiene que haber una relación entre dos tablas, en nuestro caso, como en capítulos anteriores, entre las tablas reuniones y la tabla contactos.
Ejm
SELECT nombre, apellidos, fecha_hora, lugar FROM contactos JOIN reuniones ON contactos.id = reuniones.contactos_id;
De esta manera podemos extraer los registros de ambas tablas. Va a hacer un cruce. Este tipo de consulta JOIN la podremos ver también con la palabra INNER JOIN. El efecto es el mismo.
Ejm
SELECT nombre, apellidos, fecha_hora, lugar FROM contactos INNER JOIN reuniones ON contactos.id = reuniones.contactos_id;
Esta consulta nos mostrará tan sólo los contactos que estén agendados, es decir, que tengan reuniones, los que no tengan reuniones programadas no los mostrará.
Contactos con los que no hay una reunión
Para mostrar tanto contactos que tengan reunión como los que no tengan, utilizamos la sentencia LEFT JOIN, de la siguiente manera.
Ejm
SELECT nombre, apellidos, fecha_hora, lugar FROM contactos LEFT JOIN reuniones ON contactos.id = reuniones.contactos_id;
Lo que indica es que traiga los registros que tengan reuniones, pero también aquellos registros de la tabla de la izquierda (contactos) que no tengan dicho cruce, por ello se utiliza LEFT. Los registros que devuelva que no tengan valor, se les pondrá el valor de NULL.
Reuniones que no tienen contactos
Puede que existan reuniones en las cuales la llave foránea tenga un valor NULL, y cuando hagamos la consulta, ese registro no se va a mostrar, para ello utilizamos la claúsula RIGHT JOIN, que devuelve todos los registros de la tabla de la derecha, en nuestro caso la tabla reuniones, de la siguiente manera.
Ejm
SELECT nombre, apellidos, fecha_hora, lugar FROM contactos RIGHT JOIN reuniones ON contactos.id = reuniones.contactos_id;
Esto lo que hace es primero mostrar el cruce entre ambas tablas, pero después mostrar la tabla de la derecha (reuniones) en los que no exista dicho cruce.