Cómo relacionar y unir dos tablas en MySQL: phpMyAdmin...
Este artículo va dirigido a todos aquellos/as que están dando sus primeros pasos en el mundo MySQL y, pese a haber trabajado ya con la combinación, todavía tienen ciertas dificultades a la hora de relacionar una tabla con otra. A continuación, explicamos cómo hacerlo con INNER y OUTER.
¿Para qué sirve la combinación de tablas?
Una combinación en MySQL permite obtener información proveniente de varias tablas. Estas tablas deben estar relacionadas por al menos una columna (un apellido, un ID, un número de teléfono, lo que desees, pero estas dos tablas deben tener una columna en común). Esto es lo que llamamos un criterio de combinación.
Todo lo mostrado a continuación se puede ejecutar en cualquier interfaz que interactúe con MySQL, incluyendo la línea de comandos de MySQL, MySQL Workbench, phpMyAdmin, o cualquier otra herramienta de interfaz gráfica de usuario (GUI) o línea de comandos (CLI) que pueda interactuar con MySQL.
¿Cómo utilizar INNER JOIN en la intersección de tablas?
INNER JOIN (combinación interna) debe ser utilizado cuando se tienen dos tablas y se desea obtener la información presente en ambas. Por ejemplo, tenemos la tabla "personas" que contiene un gran número de usuarios junto a su información general (persona_id, apellido, nombre, dirección, etc). Por otro lado, disponemos de la tabla "ingenieros" con más datos (id_ingeniero, persona_id, nombre de la empresa, universidad, etc). Además, todos los ingenieros se encuentran en la tabla "personas". Se desea obtener todo lo recopilado de los ingenieros, incluyendo la información que aparece de ellos en la primera tabla. Es por esto que necesitamos el contenido de ambas tablas. En el ejemplo que mostramos a continuación, nuestro criterio de combinación es "id_persona", presente en las dos tablas y único en cada una de ellas:
SELECT * FROM personas p INNER JOIN ingenieros i ON i.persona_id = p.persona_id;
¿Cómo utilizar OUTER JOIN en la unión de tablas?
OUTER JOIN (combinación externa) es útil si deseamos obtener la información de ambas tablas. En el ejemplo de arriba, solo obtuvimos una parte de la tabla: "personas" (las que tienen una línea en la tabla ingenieros). Aquí especificaremos que deseamos conservar la tabla "personas" completa: tendremos los datos "ingenieros" para los ingenieros y valores vacíos para las personas que no se encuentren en la segunda tabla. Para esto, hay que utilizar un OUTER JOIN.
¿Cómo utilizar LEFT OUTER JOIN?
LEFT OUTER JOIN especifica que la primera tabla nombrada debe permanecer completa. Siguiendo nuestro ejemplo, se obtendría toda la tabla "personas" con los datos de la tabla "ingenieros", si existieran:
SELECT * FROM personas p LEFT OUTER JOIN ingenieros i ON i.persona_id = p.persona_id;
¿Cómo utilizar RIGHT OUTER JOIN?
Es similar al anterior, pero en este caso es la segunda tabla la que se mantendrá completa. Eres libre de elegir entre un LEFT o un RIGHT. Concretamente, en nuestro ejemplo el INNER JOIN es exactamente idéntico a un OUTER JOIN realizado sobre la tabla ingenieros, pues todos los ellos están presentes en la tabla "personas":
SELECT * FROM ingenieros i RIGHT OUTER JOIN personas p ON p.persona_id = i.persona_id;
¿Cómo utilizar FULL OUTER JOIN?
FULL OUTER JOIN permite extraer la totalidad de los datos de las dos tablas. El resultado serán varias columnas vacías para una u otra de las tablas. En este caso, esto sería equivalente a RIGHT y LEFT JOIN (realizados anteriormente), pues la tabla "ingenieros" ya ha sido extraída en su totalidad. Aquí tendríamos:
SELECT * FROM personas p FULL OUTER JOIN ingenieros i ON i.persona_id = p.persona_id;