La composición externa se escribe de manera similar al INNER JOIN indicando una condición de combinación pero en el resultado se añaden filas que no cumplen la condición de combinación.
Sintaxis
FROM
<tabla_origen> {LEFT|RIGHT|FULL} [OUTER] JOIN <tabla_origen>
ON <condicion_combi>
La palabra OUTER es opcional y no añade ninguna función.
Las palabras LEFT, RIGHT y FULL indican la tabla de la cual se van a añadir las filas sin correspondencia.
SELECT numemp,nombre,empleados.oficina, ciudad
FROM empleados LEFT JOIN oficinas
ON empleados.oficina=oficinas.oficina;
| numemp | nombre | oficina | ciudad |
|---|---|---|---|
| 101 | Antonio Viguer | 12 | Alicante |
| 102 | Alvaro Jaumes | 21 | Badajoz |
| 103 | Juan Rovira | 12 | Alicante |
| 104 | José González | 12 | Alicante |
| 105 | Vicente Pantalla | 13 | Castellón |
| 106 | Luis Antonio | 11 | Valencia |
| 107 | Jorge Gutiérrez | 22 | A Coruña |
| 108 | Ana Bustamante | 21 | Badajoz |
| 109 | María Sunta | 11 | Valencia |
| 110 | Juan Victor | NULL | NULL |
Ahora sí aparece el empleado 110 que no tiene oficina
Obtiene los empleados con su oficina y los empleados (tabla a la izquierda LEFT del JOIN) que no tienen oficina aparecerán también en el resultado con los campos de la tabla oficinas rellenados a NULL.
SELECT numemp,nombre,empleados.oficina, ciudad, oficinas.oficina
FROM empleados RIGHT JOIN oficinas
ON empleados.oficina=oficinas.oficina;
| numemp | nombre | oficina | ciudad | oficina |
|---|---|---|---|---|
| 106 | Luis Antonio | 11 | Valencia | 11 |
| 109 | María Sunta | 11 | Valencia | 11 |
| 101 | Antonio Viguer | 12 | Alicante | 12 |
| 103 | Juan Rovira | 12 | Alicante | 12 |
| 104 | José González | 12 | Alicante | 12 |
| 105 | Vicente Pantalla | 13 | Castellón | 13 |
| 102 | Alvaro Jaumes | 21 | Badajoz | 21 |
| 108 | Ana Bustamante | 21 | Badajoz | 21 |
| 107 | Jorge Gutiérrez | 22 | A Coruña | 22 |
| NULL | NULL | NULL | Madrid | 23 |
| NULL | NULL | NULL | Aranjuez | 24 |
| NULL | NULL | NULL | Pamplona | 26 |
| NULL | NULL | NULL | Valencia | 28 |
Las oficinas 23,24,26 y 28 no tienen empleados.
Obtiene los empleados con su oficina y las oficinas (tabla a la derecha RIGHT del JOIN) que no tienen empleados aparecerán también en el resultado con los campos de la tabla empleados rellenados a NULL.
SELECT numemp,nombre,empleados.oficina, ciudad, oficinas.oficina FROM empleados FULL JOIN oficinas ON empleados.oficina=oficinas.oficina;
| numemp | nombre | oficina | ciudad | oficina |
|---|---|---|---|---|
| 101 | Antonio Viguer | 12 | Alicante | 12 |
| 102 | Alvaro Jaumes | 21 | Badajoz | 21 |
| 103 | Juan Rovira | 12 | Alicante | 12 |
| 104 | José González | 12 | Alicante | 12 |
| 105 | Vicente Pantalla | 13 | Castellón | 13 |
| 106 | Luis Antonio | 11 | Valencia | 11 |
| 107 | Jorge Gutiérrez | 22 | A Coruña | 22 |
| 108 | Ana Bustamante | 21 | Badajoz | 21 |
| 109 | María Sunta | 11 | Valencia | 11 |
| 110 | Juan Victor | NULL | NULL | NULL |
| NULL | NULL | NULL | Madrid | 23 |
| NULL | NULL | NULL | Aranjuez | 24 |
| NULL | NULL | NULL | Pamplona | 26 |
| NULL | NULL | NULL | Valencia | 28 |
Aparecen tanto los empleados sin oficina como las oficinas sin empleados.
SELECT numemp,nombre,empleados.oficina, ciudad, oficinas.oficina
FROM empleados FULL OUTER JOIN oficinas
ON empleados.oficina=oficinas.oficina;
Es equivalente, la palabra OUTER como hemos dicho no añade ninguna funcionalidad y se utiliza si se quiere por cuestiones de estilo.
NOTA: Cuando necesitamos obtener filas con datos de dos tablas con una condición de combinación utilizaremos un JOIN, os aconsejo empezar por escribir el JOIN con la condición que sea necesaria para combinar las filas, y luego plantearos si la composición debe de ser interna o externa. Para este segundo paso ésta sería la norma a seguir:
Empezamos con INNER JOIN.
Siguiendo el ejemplo anterior nos preguntaríamos:
¿Pueden haber empleados que no tengan oficina y nos interesan?, si es que sí, necesitamos un LEFT JOIN.
Seguiríamos preguntando:
¿Pueden haber oficinas que no tengan empleados y nos interesan?, si es que sí, necesitamos un RIGHT JOIN.
Si al final necesitamos LEFT y también RIGHT entonces utilizamos FULL JOIN.
Para practicar puedes realizar este Ejercicio La composición externa LEFT JOIN y RIGHT JOIN.
Síguenos en: Facebook Sobre aulaClic Política de Cookies
© aulaClic. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.