Какой результат будет при объединении двух таблиц с помощью LEFT JOIN на примере кругов Эйлера?

«Какой результат будет при объединении двух таблиц с помощью LEFT JOIN на примере кругов Эйлера?» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

LEFT JOIN (или LEFT OUTER JOIN) возвращает все записи из левой таблицы (Table A) и только те сопоставленные записи из правой таблицы (Table B), для которых условие соединения выполняется. Если соответствия в правой таблице нет, то все столбцы из правой таблицы в результирующей строке будут иметь значение NULL.

Аналогия с диаграммой Эйлера: Представьте два пересекающихся круга.

  • Весь левый круг (A) попадает в результат.
  • Пересечение (A ∩ B): Записи, где есть соответствие в обеих таблицах. Столбцы из B будут заполнены.
  • Часть левого круга без пересечения (A B): Записи из A, для которых нет соответствия в B. Столбцы из B будут NULL.
  • Часть правого круга без пересечения (B A): Эти записи НЕ попадают в результат LEFT JOIN.

Пример на SQL:

-- Таблицы
-- Employees (id, name, department_id)
-- Departments (id, department_name)

SELECT 
    e.name AS employee_name,
    d.department_name
FROM Employees e
LEFT JOIN Departments d ON e.department_id = d.id;

Результат будет содержать:

  1. Всех сотрудников из таблицы Employees.
  2. Для сотрудников, у которых есть department_id, соответствующий записи в Departments, будет указано название отдела (department_name).
  3. Для сотрудников, у которых department_id равен NULL или не найден в Departments, в колонке department_name будет NULL. Это позволяет видеть всех сотрудников, даже тех, кто не привязан к отделу.