JOIN
Оператор, объединяющий строки из двух и более таблиц по условию связи между ними.
SELECT ... FROM t1 [INNER|LEFT|RIGHT|FULL OUTER|CROSS] JOIN t2 ON t1.id = t2.t1_id;Объяснение
Пример
-- Самый частый случай: 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';Связанные термины
Анекдоты по теме
DBA смотрит на запрос с 15 JOIN: — Ты зачем это написал? Разработчик: — Мне нужны все данные. DBA: — Тебе нужен психотерапевт. И денормализация.
Оптимизатор запросов видит запрос с 7 JOIN. Оптимизатор: интересно. Оптимизатор перебирает 5040 возможных порядков соединения. Оптимизатор: выбираю лучший. Разработчик: почему запрос планируется 2 секунды? Оптимизатор: ты написал 7 JOIN.
— Почему HASH JOIN быстрее NESTED LOOP при больших таблицах? — NESTED LOOP: для каждой строки левой таблицы ищет совпадение в правой. O(n*m). — HASH JOIN: строит хэш-таблицу из меньшей таблицы, потом сканирует большую. O(n+m). — Но при маленьких таблицах? — NESTED LOOP эффективнее из-за меньших накладных расходов.