Ответ
JOIN используется для объединения строк из двух или более таблиц на основе связанного столбца. Основные виды:
1. INNER JOIN Возвращает только те строки, где есть совпадение в обеих таблицах.
SELECT users.name, orders.total
FROM users
INNER JOIN orders ON users.id = orders.user_id;
-- Результат: только пользователи, сделавшие заказы.
2. LEFT (OUTER) JOIN
Возвращает все строки из левой таблицы и совпадающие строки из правой. Если совпадения нет, для столбцов правой таблицы возвращается NULL.
SELECT users.name, orders.total
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
-- Результат: все пользователи, даже те, у кого нет заказов.
3. RIGHT (OUTER) JOIN
Обратный LEFT JOIN. Возвращает все строки из правой таблицы и совпадающие из левой. Используется реже, так как его можно заменить LEFT JOIN с перестановкой таблиц.
4. FULL (OUTER) JOIN
Возвращает все строки из обеих таблиц. Если совпадения нет, недостающие столбцы заполняются NULL. Не поддерживается в MySQL, но есть в PostgreSQL, SQL Server.
-- PostgreSQL пример
SELECT users.name, orders.total
FROM users
FULL OUTER JOIN orders ON users.id = orders.user_id;
5. CROSS JOIN Возвращает декартово произведение таблиц — каждая строка первой таблицы соединяется с каждой строкой второй. Может быть полезен для генерации данных, но требует осторожности.
SELECT sizes.size, colors.color FROM sizes CROSS JOIN colors;
6. SELF JOIN Соединение таблицы с самой собой. Часто используется для иерархических данных (например, сотрудник -> менеджер).
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
Важно: Для производительности необходимо наличие индексов на столбцах, участвующих в условии ON.