En este artículo veremos cómo hacer uniones de tablas con RIGHT JOIN en PostgreSQL o también conocido como right outer join. Puedes leer otros artículos para aprender más sobre las uniones u otros artículo para aprender a utilizar INNER JOIN, LEFT JOIN, FULL JOIN y CROSS JOIN.
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 artículo 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 está 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.
Right Join
La tercera cláusula es la llamada right join o según su traducción literal, unión por la derecha. Este tipo de uniones nos devolverá aquellos datos que existan en ambas tablas y además todo lo que tenga la segunda tabla. Como se muestra en la siguiente imagen, si tuviésemos la tabla A y la unimos por medio de right join con la tabla B, nos devolverá todo aquello que coincida en ambas y todo lo que tenga la tabla B.
Sintaxis
La sintaxis para unir tablas con right join es la siguiente:
SELECT tabla1.columna1, tabla1.columnaN,
tabla2.columna1, tabla2.columnaN
FROM nombreTabla1 tabla1
RIGH JOIN nombreTabla2 tabla2
ON tabla1.columna1 = tabla2.columna1
Ejemplo
Si queremos mostrar los nombres de los empleados de la tabla de empleados y el nombre del departamento al que pertenecen de la tabla departamentos independientemente de que tenga algún empleado asignado, la consulta sería la siguiente:
select e.nombre, d.nombre
from empleados e
right join departamentos d
on e.id_departamento=d.id_departamento;
Lenguaje del código: JavaScript (javascript)
Si ejecutamos la consulta comprobamos como nos muestra los empleados que tienen un departamento existente y además todos los nombres de los departamentos tengan o no algún empleado.
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 que el departamento
-- existe en ambas tablas y todos los departamentos
-- aunque no tengan empleado asignado
select e.nombre, d.nombre
from empleados e
right join departamentos d
on e.id_departamento=d.id_departamento;
Lenguaje del código: JavaScript (javascript)