Tiempo de lectura:2 Minutos, 50 Segundos

En este articulo veremos como hacer uniones de tablas con LEFT JOIN en PostgreSQL o también conocido como left outer join. Puedes leer otros artículos para aprender más sobre las uniones u otros articulo para aprender a utilizar INNER JOIN, RIGHT JOIN, FULL JOIN y CROSS JOIN.

Consejo

Al mostrar columnas de varias tablas, en el caso de que exista la misma columna en varias tablas dará error. Siempre se aconseja utilizar alias de tablas para evitar este problema.

Modelo utilizado

Al final del articulo puedes encontrar el script completo para crear las tablas utilizadas en este ejemplo. Para poder comprender el funcionamiento es necesario que visualices el modelo que esta construido en la base de datos. Tenemos dos tablas, departamentos y empleados, las cuales la única relación posible que tienen entre ellas es la columna id_departamento.

Left Join

La segunda cláusula es la llamada left join o según su traducción literal, union por la izquierda. Este tipo de uniones nos devolverá aquellos datos que existan en ambas tablas y ademas todo lo que tenga la primera tabla. Como se muestra en la siguiente imagen, si tuviésemos la tabla A y la unimos por medio de left join con la tabla B, nos devolverá todo aquello que coincida en ambas y todo lo que tenga la tabla A.

Sintaxis

La sintaxis para unir tablas con left join es la siguiente:

SELECT tabla1.columna1, tabla1.columnaN, 
       tabla2.columna1, tabla2.columnaN 
FROM nombreTabla1 tabla1
   LEFT JOIN nombreTabla2 tabla2 
   ON tabla1.columna1 = tabla2.columna1

Ejemplo

Si queremos mostrar los nombres de los empleados de la tabla de empleados independientemente de si estas o no en la tabla de empleados y el nombre del departamento al que pertenecen de la tabla departamentos, la consulta sería la siguiente:

select e.nombre, d.nombre
from empleados e
  left join departamentos d 
  on e.id_departamento=d.id_departamento;

Si ejecutamos la consulta comprobamos como nos muestra todos los empleados, pero en el nombre del departamento de uno de ellos esta a nulo porque el departamento asignado no existe en la tabla departamentos.

Ejemplo completo

Copia y pega el siguiente código en tu consola de PostgreSQL y realiza paso a paso leyendo los comentarios.

--MiguelTroyano.com
-- Borramos las tablas si existen
drop table if exists empleados;
drop table if exists departamentos;

-- Creamos las tablas
create table empleados
(
    id_empleado numeric(2,0) primary key,
    id_departamento numeric(2,0),
    nombre character varying(50),
    puesto character varying(50),
    fecha_alta date,
    sueldo integer
);

create table departamentos
(
    id_departamento numeric(2,0) primary key,
    nombre character varying(50),
    edificio character varying(50),
     planta numeric(2,0)
);

-- Insertamos valores
insert into empleados
values (1,2,'Miguel Troyano','Analista',TO_DATE( '26/09/1986', 'DD/MM/YYYY'),60000),
       (2,2,'Ismael Troyano','Analista',TO_DATE( '01/01/2001', 'DD/MM/YYYY'),60000),
       (3,3,'Jose Troyano','Alta Dirección',TO_DATE( '01/01/2001', 'DD/MM/YYYY'),80000),
       (4,5,'Pilar Redondo','Alta Dirección',TO_DATE( '02/02/2002', 'DD/MM/YYYY'),80000);

insert into departamentos
values (1,'Mantenimiento','Edificio 1',7),
       (2,'Inteligencia de negocio','Edificio 2',7),
       (3,'Recursos Humanos','Edificio 3',8),
       (4,'Finanzas','Edificio 3',8);

-- Mostramos nombre de empleado aunque no exista el departamento
-- en la tabla departamentos y los nombre de departamento.
select e.nombre, d.nombre
from empleados e
  left join departamentos d 
  on e.id_departamento=d.id_departamento;

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.

Perfiles en Redes Sociales