Зарегистрируйтесь, чтобы продолжить обучение

FULL JOIN (полное соединение) SQL: Join

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

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

Применяем FULL JOIN

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

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

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

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

departments

department_id name
1 Development Department
2 Marketing Department
3 Finance Department
4 HR Department
5 Sales Department

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

employees

employee_id department_id name salary
1 1 John Smith 50000.00
2 1 Peter Johnson 60000.00
3 2 Mary Brown 55000.00
4 2 Alex Miller 70000.00
5 3 Helen White 48000.00
6 NULL Adam Smith 10000.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;

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

department employee
Development Department John Smith
Development Department Peter Johnson
Marketing Department Mary Brown
Marketing Department Alex Miller
Finance Department Helen White
NULL Adam Smith
Sales Department NULL
HR Department NULL

View on DB Fiddle

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

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

full-join

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

Выводы

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

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


Дополнительные материалы

  1. FULL JOIN

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff