Es sorprendente lo poco que se usan en el mundo real las Combinaciones Externas u Outer Joins. Las Combinaciones Externas nos permiten seleccionar las filas de una tabla aunque estas no tengan correspondencia con las filas de la otra tabla con la que se combinan.

PROBLEMA:

Para estas las dos tablas USUARIOS y POBLACIONES tenemos:

Usuarios:

NOMBRE ID_POBLACION
Oscar 1
Fernando
María 2

Y poblaciones:

ID_POBLACION POBLACION
1 Madrid
2 León

Si queremos saber todos los usuarios y su población (si es posible) no podemos usar el siguiente SQL porque solo nos devolvería los usuarios con población conocida:

SELECT USUARIOS.NOMBRE, POBLACIONES.POBLACION 
FROM USUARIOS, POBLACIONES 
WHERE USUARIOS.ID_POBLACION = POBLACIONES.ID_POBLACION;

Nos devolvería:

NOMBRE POBLACION
Oscar Madrid
María León

Para evitar esto, demasiado a menudo se usan consultas anidadas, las cuales no tienen ninguna ventaja y si una grandísima penalización en rendimiento que crece exponencialmente con el número de filas devueltas. Un ejemplo sería:

SELECT USUARIOS.NOMBRE, (SELECT POBLACIONES.POBLACION FROM POBLACIONES WHERE POBLACIONES.ID_POBLACION = USUARIOS.ID_POBLACION) AS POBLACION
FROM USUARIOS 

O esto mismo usando funciones que ejecutan las subconsultas, y que aunque el código es mucho más claro, realmente es equivalente e igualmente mala idea:

SELECT USUARIOS.NOMBRE, DAME_POBLACION(USUARIOS.ID_POBLACION) AS POBLACION
FROM USUARIOS 

SOLUCION:

Esto mismo es mucho más sencillo y eficiente hacerlo mediante Combinaciones Externas u Outer Joins con el siguiente formato:

SELECT USUARIOS.NOMBRE, POBLACIONES.POBLACION 
   FROM USUARIOS, POBLACIONES 
   WHERE USUARIOS.ID_POBLACION = POBLACIONES.ID_POBLACION (+);

Ejecutando esta consulta nos devolvería:

NOMBRE POBLACION
Oscar Madrid
Fernando
María León
Combinación Externa | Outer Join: (+)

Selecciona todas las filas de la tabla «USUARIOS» aunque no tengan correspondencia con las filas de la tabla «POBLACIONES», se utiliza el símbolo (+), y el resto de columnas de la tabla «POBLACIONES» se rellena con NULL.

Optin

¡ No se Pierda Nuestro Boletín !

Suscribirse y le comunicaremos cuando publiquemos nuevos artículos.

 

(No más de 1 correo semanal | 100% sin SPAM)

Se ha suscrito correctamente.

Pin It on Pinterest

Share This