Suele ser muy común confundirse con las distintas combinaciones que se pueden realizar entre tablas, por ello vamos a aclarar las diferencias entre cada una.
Existen las combinaciones internas de tablas donde cada registro de la tabla A se combina con otro de la tabla B que cumpla las condiciones.
Ej: Obtener los empleados del departamento de recursos humanos:
select * from empleados a, departamentos b where a.id_departamento=b.id
Esta consulta anterior se podría haber expresado de forma explicíta así:
select * from empleados a inner join departamentos b on a.id_departamento=b.id
Este tipo de combinaciones de tabas suele ser la más utilizada, pero si por ejemplo queremos un listado de todos los empleados, que tengan o no departamento asignado, entonces debemos realizar lo que se llama una combinación externa.
Ej: Obtener todos los empleados tengan o no departamento asignado:
select * from empleados a left join departamentos b on a.id_departamento=b.id
De esta forma se realizada un outer join por la izquierda, es decir nos traemos todos los registros de la tabla izquierda tengan o no correspondencia con la tabla derecha. Por el lado contrario un right join hace lo mismo pero trayendo todos los registros de la tabla derecha tengan o no correspondencia con la de la izquierda. Aquellos registros sin correspondencia entren para el campo correspondiente un valor NULL, es decir si un empleado no tiene departamento, entonces su valor es null.
Los ejemplos que hemos visto hasta ahora se pueden aplicar en MySQL y otros compatibles, pero en Oracle para realizar los outer join se realizan así:
select * from empleados a, departamentos b where a.id_departamento(+)=b.id
Es decir se coloca el (+) en el lado que queramos (left o right).
En los left o right join se puede ademas aplicar otras condiciones.
Ej: Obtener los empleados de los departamentos que tengan hipoteca:
select * from empleados a left join departamentos b on a.id_departamento=b.id where a.hipoteca=1
Comentarios