Выражение «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;
Состав таблиц:
FULL OUTER JOIN для максимального отбора записей по каждой из таблиц в PostgreSQL
SELECT * FROM test.t41 FULL OUTER JOIN test.t42 ON test.t41.carid = test.t42.id;
Для соединения мы используем поля «carid» и «id«.
В соединение попали все 9 имён первой таблицы и все 12 названий марок автомобилей из второй таблицы.
С учётом пересечения, получилось 15 записей в новой результирующей таблице.