Короткий ответ
JOIN — ключевое слово SQL для выборки данных из нескольких таблиц на основе связи между их полями: записи объединяются по связанному столбцу. INNER JOIN возвращает только строки с совпадениями в обеих таблицах. LEFT JOIN — все строки левой таблицы и совпавшие строки правой, RIGHT JOIN — симметрично, а FULL JOIN — все строки обеих таблиц.
Как это работает подробнее
Типы JOIN отличаются тем, что происходит со строками, у которых нет пары в другой таблице.
- INNER JOIN. Самый часто используемый тип: если в одной из таблиц нет подходящей строки, запись в результат не попадает.
- LEFT OUTER JOIN. Возвращает все записи левой таблицы; если пары в правой нет, её поля заполняются NULL.
- RIGHT OUTER JOIN. Работает симметрично: все строки правой таблицы и только совпавшие строки левой.
- FULL OUTER JOIN. Возвращает строки при совпадении в любой из таблиц: все строки левой и правой с NULL на месте отсутствующих совпадений.
- Специальные виды. CROSS JOIN даёт декартово произведение строк, а SELF-JOIN соединяет таблицу с самой собой через алиасы, например для сравнения значений внутри столбца.
Пример кода
INNER JOIN сотрудников и отделов
SELECT * FROM employees e
INNER JOIN departments d ON e.dept_id = d.id;
-- вернёт только сотрудников, у которых найден отделЧто использовать на практике
- Связанные данные. Когда нужны только строки с парами в обеих таблицах, бери INNER JOIN.
- Полнота левой таблицы. Если важны все строки левой таблицы даже без пары справа, используй LEFT JOIN.
- Условие связи. Всегда задавай ключи соединения через
ON, иначе получишь декартово произведение.
Подводные камни
- Забытое условие ON. JOIN без условия превращается в CROSS JOIN и размножает строки результата.
- Путаница сторон. Перепутав левую и правую таблицы в LEFT или RIGHT JOIN, легко потерять нужные строки.
- NULL вместо данных. После OUTER JOIN отсутствующие значения приходят как NULL, и их нужно явно обрабатывать.
Как отвечать на собеседовании
- Определи JOIN как соединение таблиц по связанным полям → объясни INNER JOIN и почему он самый частый → перейди к LEFT, RIGHT и FULL с акцентом на NULL → упомяни CROSS JOIN и SELF-JOIN → приведи пример с ON.