Ответ
В SQL JOIN используется для объединения строк из двух или более таблиц на основе связанного столбца. Основные типы:
1. INNER JOIN Возвращает только те строки, где есть совпадение в обеих таблицах. Самый распространенный тип.
SELECT users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;
-- Результат: только пользователи, сделавшие заказы.
2. LEFT (OUTER) JOIN
Возвращает все строки из левой таблицы и совпадающие строки из правой. Если совпадения нет, поля из правой таблицы будут NULL.
SELECT users.name, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
-- Результат: все пользователи, даже те, у кого нет заказов.
3. RIGHT (OUTER) JOIN
Обратный LEFT JOIN. Возвращает все строки из правой таблицы и совпадающие из левой. Используется реже.
4. FULL (OUTER) JOIN
Возвращает все строки, когда есть совпадение либо в левой, либо в правой таблице. Отсутствующие значения заполняются NULL. Не поддерживается в MySQL напрямую, эмулируется через UNION LEFT и RIGHT JOIN.
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;
-- Результат: список сотрудников с именами их менеджеров.
На практике INNER JOIN и LEFT JOIN используются в 90% случаев. Важно понимать разницу: INNER JOIN фильтрует данные, а LEFT JOIN сохраняет все записи из основной таблицы.