SQL: Join

Теория: FULL JOIN (полное соединение)

В этом уроке мы рассмотрим полное внешнее соединение — FULL OUTER JOIN или сокращенно FULL JOIN. Результат этого соединения содержит все строки из обеих таблиц:

  • Все пары строк, которые удовлетворяют условию соединения — как в INNER JOIN
  • Все строки без пары из первой таблицы
  • Все строки без пары из второй таблицы

Применяем FULL JOIN

Пусть в базе данных хранится информация о сотрудниках и отделах. Наша задача — построить отчет, в котором будет указано, в каком отделе работает каждый из сотрудников.

Если есть отделы без сотрудников или сотрудники без отдела, то они тоже должны быть в отчете.

Рассмотрим структуру таблиц.

Таблица departments содержит информацию об отделах:

departments

department_idname
1Development Department
2Marketing Department
3Finance Department
4HR Department
5Sales Department

Таблица employees содержит информацию о сотрудниках:

employees

employee_iddepartment_idnamesalary
11John Smith50000.00
21Peter Johnson60000.00
32Mary Brown55000.00
42Alex Miller70000.00
53Helen White48000.00
6NULLAdam Smith10000.00

View on DB Fiddle

В данных есть отделы без сотрудников и сотрудники без отделов. Бизнес логика и схема базы данных допускают такие записи.

Выполним полное внешнее соединение этих таблиц по условию departments.department_id = employees.department_id:

SELECT
    dep.name as department,
    emp.name as employee
FROM departments AS dep
FULL JOIN employees AS emp ON
    dep.department_id = emp.department_id;

Результат выполнения запроса:

departmentemployee
Development DepartmentJohn Smith
Development DepartmentPeter Johnson
Marketing DepartmentMary Brown
Marketing DepartmentAlex Miller
Finance DepartmentHelen White
NULLAdam Smith
Sales DepartmentNULL
HR DepartmentNULL

View on DB Fiddle

Результат содержит всех сотрудников с отделами, все отделы без сотрудников и всех сотрудников без отделов.

Схематично работа FULL JOIN выглядит так:

full-join

В результат соединения попадают все пары строк, которые удовлетворяют условию соединения. Также туда попадают все строки без пары из первой (левой) таблицы и все строки без пары из второй (правой) таблицы.

Выводы

Полное внешнее соединение используют, когда в результате должны быть все строки из обеих таблиц, даже если у них нет подходящей пары. Результат FULL JOIN включает в себя результаты INNER JOIN, LEFT JOIN и RIGHT JOIN.

FULL OUTER JOIN и FULL JOIN обозначают одно и то же действие в SQL. Оба они используются для объединения данных из двух таблиц, возвращая все строки из обеих таблиц, даже если нет совпадений.

Рекомендуемые программы