SQLLab
JOINНачальный

JOIN

Оператор, объединяющий строки из двух и более таблиц по условию связи между ними.

Синтаксис
SELECT ... FROM t1 [INNER|LEFT|RIGHT|FULL OUTER|CROSS] JOIN t2 ON t1.id = t2.t1_id;

Объяснение

JOIN склеивает строки из нескольких таблиц в один результат на основе условия связи (чаще всего — совпадение внешнего ключа с первичным). Без JOIN пришлось бы делать отдельные запросы и соединять данные в коде. INNER JOIN: только строки, у которых есть совпадение в обеих таблицах. Самый частый вариант — если не уверен, какой нужен, скорее всего этот. LEFT JOIN: все строки левой таблицы, даже без пары справа (тогда NULL). Нужен, когда связь необязательна — например, пользователи без заказов. RIGHT JOIN: зеркало LEFT JOIN. На практике почти не используется — обычно проще поменять таблицы местами и использовать LEFT JOIN. FULL OUTER JOIN: все строки из обеих таблиц. Редко, но полезен для поиска несовпадений между двумя источниками данных. CROSS JOIN: декартово произведение без условия ON — для генерации всех возможных комбинаций. Производительность: колонка, по которой соединяешь, должна быть проиндексирована (обычно это foreign key) — без индекса JOIN превращается в перебор вложенными циклами O(n×m).

Пример

-- Самый частый случай: INNER JOIN
SELECT o.id, o.total, u.name, u.email
FROM orders o
JOIN users u ON u.id = o.user_id
WHERE o.status = 'paid';