Какие виды JOIN операций вы знаете в SQL?

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

Ответ

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

1. INNER JOIN

Возвращает только те строки, где есть совпадение в обеих таблицах.

SELECT employees.name, departments.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

2. OUTER JOIN

Возвращает все строки из одной или обеих таблиц, даже если совпадения нет. Несовпадающие значения заполняются NULL.

  • LEFT (OUTER) JOIN: Все строки из левой таблицы + совпадения из правой.
    SELECT employees.name, departments.name
    FROM employees
    LEFT JOIN departments ON employees.department_id = departments.id;
  • RIGHT (OUTER) JOIN: Все строки из правой таблицы + совпадения из левой.
  • FULL (OUTER) JOIN: Все строки из обеих таблиц (совпадения + уникальные строки с каждой стороны).

3. CROSS JOIN

Возвращает декартово произведение — все возможные комбинации строк из обеих таблиц.

SELECT sizes.size, colors.color
FROM sizes
CROSS JOIN colors;

4. SELF JOIN

Соединение таблицы самой с собой, часто для представления иерархических данных (например, сотрудник → менеджер).

SELECT emp.name AS employee, mgr.name AS manager
FROM employees emp
LEFT JOIN employees mgr ON emp.manager_id = mgr.id;

5. NATURAL JOIN

Автоматически соединяет таблицы по столбцам с одинаковыми именами. Использовать не рекомендуется из-за неявного поведения и риска ошибок при изменении схемы.

Практическое правило: Для ясности и надежности всегда явно указывайте условие соединения с помощью ON или USING.