0
Gracias

Unas palabras de agradecimiento nunca están de más.

MySQL - ¿Qué tipo de combinación elegir?

Este artículo va dirigido a todos aquellos que están dando sus primeros pasos en el mundo MySQL y, pese a que han comenzando a trabajar la combinación<bold>, todavía tienen dificultades con <bold>INNER y OUTER.




Preliminares

Una combinación en MySQL</bold> 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.

INNER JOIN: intersección de tablas

El INNER JOIN (combinación interna) debe ser utilizado cuando se tiene 2 tablas, y solo se desea obtener la información presente en las 2 tablas.

Ejemplo: se tiene una tabla "personas" que contiene un gran número de personas con información general (persona_id, apellido, nombre, dirección...). Al lado, se tiene una tabla "ingenieros" con información sobre los ingenieros (id_ingeniero, persona_id, nombre de la empresa, universidad...). La base está limpia y todos los ingenieros se encuentran en la tabla "personas". Se desea obtener toda la información de los ingenieros, incluyendo sus direcciones, apellidos, nombres, etc. Para esto se necesita la información almacenada en las dos tablas.

Nuestro criterio de combinación es el "id_persona" presente en las dos tablas y único en cada una de ellas.

Haremos:

SELECT * 
FROM persona p
     INNER JOIN ingenieros i ON i.persona_id = p.persona_id;


Con esto obtendremos toda la información de las personas presentes en las dos tablas.

OUTER JOIN: unión de tablas

El 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 tabla ingenieros.

Para esto, utilizamos un OUTER JOIN.

LEFT OUTER JOIN

El LEFT OUTER JOIN especifica que la primera tabla nombrada debe permanecer completa.

En nuestro ejemplo:

SELECT * 
FROM persona p
     LEFT OUTER JOIN ingenieros i ON i.persona_id = p.persona_id;


Con esto se obtiene toda la tabla "personas" completa con los datos de la tabla "ingenieros", si existieran.

RIGHT OUTER JOIN

Esto es lo mismo que LEFT pero aquí es la segunda tabla la que se mantendrá completa. Eres libre de elegir entre un LEFT o un RIGHT.

Nuestra petición sería:

SELECT * 
FROM ingenieros i 
     RIGHT OUTER JOIN persona p ON p.persona_id = i.persona_id;


En nuestro ejemplo, ya que todos los ingenieros están presentes en la tabla "personas", el INNER JOIN es exactamente idéntico a un OUTER JOIN realizado sobre la tabla ingenieros. En los dos casos se obtendrá completamente.

FULL OUTER JOIN

Igualmente útil, el 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.

Aquí tendríamos:

SELECT * 
FROM persona p
     FULL OUTER JOIN ingenieros i ON i.persona_id = p.persona_id;


Esto sería equivalente a RIGHT y LEFT JOIN (realizados anteriormente) pues la tabla “ingenieros” ya ha sido extraída en su totalidad.

Foto: © Everypixel

0
Gracias

Unas palabras de agradecimiento nunca están de más.

Haz una pregunta
Nuestros contenidos son redactados en colaboración con expertos del ámbito tecnológico bajo la dirección de Jean-François Pillou, fundador de CCM.net. CCM es un sitio de tecnología líder a nivel internacional y está disponible en 11 idiomas.
Consulta también
El documento « MySQL - ¿Qué tipo de combinación elegir? » se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo libremente. No olvides citar a CCM (es.ccm.net) como tu fuente de información.

¡Suscríbete a nuestra Newsletter!

Recibe nuestros mejores artículos

¡Suscríbete a nuestra Newsletter!