PostgreSQL | FULL OUTER JOIN для двух таблиц

PostgreSQL | FULL OUTER JOIN для двух таблиц

Выражение «FULL OUTER JOIN» в PostgreSQL — это полное внешнее соединение между двумя таблицами, которое захватывает все варианты левой и правой таблицы со включением «null«-значений, если пересечение не будет найдено.

Давайте рассмотрим пример:

create table test.t41 (
   id int,
   name text,
   carid int,
   primary key (id)
);
insert into test.t41 values (1, 'Антон', 3);
insert into test.t41 values (2, 'Василий', 2);
insert into test.t41 values (3, 'Иван', null);
insert into test.t41 values (4, 'Николай', 1);
insert into test.t41 values (5, 'Дмитрий', 9);
insert into test.t41 values (6, 'Мария', null);
insert into test.t41 values (7, 'Светлана', 5);
insert into test.t41 values (8, 'Галина', null);
insert into test.t41 values (9, 'Аркадий', 7);
SELECT * FROM test.t41;

 

create table test.t42 (
   id int,
   carname text,
   primary key (id)
);
insert into test.t42 values (1, 'Toyota');
insert into test.t42 values (2, 'Mazda');
insert into test.t42 values (3, 'BMW');
insert into test.t42 values (4, 'Renault');
insert into test.t42 values (5, 'Agoda');
insert into test.t42 values (6, 'Jeep');
insert into test.t42 values (7, 'Audi');
insert into test.t42 values (8, 'Daewoo');
insert into test.t42 values (9, 'Kia');
insert into test.t42 values (10, 'Mercedes');
insert into test.t42 values (11, 'Mitsubishi');
insert into test.t42 values (12, 'Opel');
SELECT * FROM test.t42;

 

Состав таблиц:

Таблица t41 в PostgreSQL
Таблица t41 в PostgreSQL
Таблица t42 в PostgreSQL
Таблица t42 в PostgreSQL

 

FULL OUTER JOIN для максимального отбора записей по каждой из таблиц в PostgreSQL

SELECT * FROM test.t41 FULL OUTER JOIN test.t42 ON test.t41.carid = test.t42.id;

Для соединения мы используем поля «carid» и «id«.

FULL OUTER JOIN на 15 записей в PostgreSQL
FULL OUTER JOIN на 15 записей в PostgreSQL

В соединение попали все 9 имён первой таблицы и все 12 названий марок автомобилей из второй таблицы.

С учётом пересечения, получилось 15 записей в новой результирующей таблице.