Какие виды операций соединения (JOIN) знаешь в SQL?

«Какие виды операций соединения (JOIN) знаешь в SQL?» — вопрос из категории Базы данных, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В SQL операции JOIN используются для объединения строк из двух или более таблиц на основе связанного столбца. Основные виды:

  • INNER JOIN (или просто JOIN): Возвращает только те строки, для которых есть совпадение в обеих таблицах.

    SELECT employees.name, departments.name
    FROM employees
    INNER JOIN departments ON employees.department_id = departments.id;
  • LEFT (OUTER) JOIN: Возвращает все строки из левой (первой) таблицы и соответствующие строки из правой. Если совпадения нет, поля из правой таблицы будут NULL.

    SELECT employees.name, projects.title
    FROM employees
    LEFT JOIN projects ON employees.id = projects.lead_id;
    -- Покажет всех сотрудников, даже тех, кто не ведёт проект
  • RIGHT (OUTER) JOIN: Аналогичен LEFT JOIN, но приоритет отдан правой таблице. Возвращает все строки из правой таблицы и совпадения из левой.

  • FULL (OUTER) JOIN: Возвращает все строки из обеих таблиц. Если для строки из одной таблицы нет совпадения в другой, недостающие поля заполняются NULL.

  • CROSS JOIN: Возвращает декартово произведение таблиц — каждая строка первой таблицы соединяется с каждой строкой второй. Может генерировать очень большие результирующие наборы.

    SELECT sizes.size, colors.color
    FROM sizes
    CROSS JOIN colors;
    -- Создаст все возможные комбинации размеров и цветов
  • SELF JOIN: Технически это обычный JOIN таблицы с самой собой. Часто используется для работы с иерархическими данными (например, таблица сотрудников с полем manager_id).

    SELECT e1.name AS Employee, e2.name AS Manager
    FROM employees e1
    LEFT JOIN employees e2 ON e1.manager_id = e2.id;