Unidad 4. Consultas multitabla (V)


4.8. La Composición externa LEFT, RIGHT y FULL OUTER JOIN

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.

  • Si pueden haber filas de la primera tabla que no estén  relacionadas con filas de la segunda tabla y nos interesa que salgan en el resultado, entonces cambiamos a LEFT JOIN.
  • Si pueden haber filas de la segunda tabla que no estén  relacionadas con filas de la primera tabla y nos interesa que salgan en el resultado, entonces cambiamos a RIGHT JOIN.
  • Si necesitamos LEFT y RIGHT entonces utilizamos FULL 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.

Febrero-2010
Pág. 4.5

Atrás  Inicio  Adelante



.