Ответ
JOIN — это операция для объединения строк из двух или более таблиц на основе логической связи между ними. Основные типы:
- INNER JOIN: Возвращает только те строки, где есть совпадение в обеих таблицах. Это самый распространенный тип.
SELECT users.name, orders.total FROM users INNER JOIN orders ON users.id = orders.user_id; - LEFT (OUTER) JOIN: Возвращает все строки из левой таблицы и соответствующие строки из правой. Если совпадения нет, в полях правой таблицы будет
NULL.SELECT users.name, orders.total FROM users LEFT JOIN orders ON users.id = orders.user_id; -- Покажет всех пользователей, даже тех, у кого нет заказов - RIGHT JOIN: Аналогичен LEFT JOIN, но возвращает все строки из правой таблицы. Используется реже.
- FULL OUTER JOIN: Возвращает все строки, когда есть совпадение в левой ИЛИ правой таблице. (В MySQL не поддерживается, эмулируется через UNION).
Ключевые моменты из практики:
- Для производительности критически важно, чтобы поля в условии
ONбыли проиндексированы. - При соединении нескольких таблиц важно понимать порядок и логику, чтобы не получить неожиданный декартов продукт.
- Я часто использую алиасы для улучшения читаемости сложных запросов:
SELECT u.email, o.id, p.title FROM users u JOIN orders o ON u.id = o.user_id JOIN order_items oi ON o.id = oi.order_id JOIN products p ON oi.product_id = p.id WHERE o.status = 'completed';