Какие типы соединений (JOIN) вы знаете в SQL?

«Какие типы соединений (JOIN) вы знаете в SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

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

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

2. LEFT (OUTER) JOIN Возвращает все строки из левой таблицы и совпадающие строки из правой. Если совпадения нет, для правой таблицы возвращаются NULL.

SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;
-- Покажет всех сотрудников, даже без отдела

3. RIGHT (OUTER) JOIN Обратный LEFT JOIN. Возвращает все строки из правой таблицы и совпадающие из левой.

4. FULL (OUTER) JOIN Возвращает все строки, когда есть совпадение в левой ИЛИ правой таблице. Если совпадения нет, недостающие стороны заполняются NULL. (Не во всех СУБД).

5. CROSS JOIN Возвращает декартово произведение: каждая строка из первой таблицы соединяется с каждой строкой из второй. Используется редко.

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

6. SELF JOIN Соединение таблицы с самой собой (часто для иерархических данных).

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

Визуализация (Venn-диаграммы):

  • INNER JOIN = пересечение двух кругов.
  • LEFT JOIN = весь левый круг + пересечение.
  • FULL JOIN = объединение двух кругов.