JOINНачальный
INNER JOIN
Возвращает только строки, у которых есть совпадение в обеих таблицах.
Синтаксис
SELECT ... FROM t1 INNER JOIN t2 ON t1.id = t2.t1_id;
Объяснение
INNER JOIN — самый распространённый тип соединения. Строки без пары в другой таблице не попадают в результат.
Производительность: всегда добавляй индекс на колонку соединения (обычно foreign key). JOIN без индекса = вложенные циклы O(n*m).
Пример
-- Заказы с информацией о покупателе SELECT o.id, o.total, u.name, u.email FROM orders o INNER JOIN users u ON u.id = o.user_id WHERE o.status = 'paid';
Связанные термины
CROSS JOINДекартово произведение двух таблиц: каждая строка первой соединяется с каждой строкой второй.FULL OUTER JOINВозвращает все строки из обеих таблиц. Где нет совпадения — NULL с соответствующей стороны.LEFT JOINВозвращает все строки из левой таблицы. Для строк без пары в правой — NULL.RIGHT JOINВозвращает все строки из правой таблицы. Для строк без пары в левой — NULL.
Анекдоты по теме
— Какая разница между INNER JOIN и дружбой? — INNER JOIN рвётся, если нет совпадений. А дружба — LEFT JOIN. Даже когда вы не совпадаете, ты всё равно остаёшься в таблице.
Одна таблица говорит другой: — Ты меня не найдёшь, я не по ключу! — А я тебя через CROSS JOIN найду. Ты у меня с каждым своим столбцом перемножишься. — Ты чудовище.
Таблица Users пишет таблице Orders: — Ты забыл про меня. Мы не связаны. Orders: — У тебя нет внешнего ключа ко мне. Users: — Значит, я буду NULL в твоей жизни. DBA: — Это LEFT JOIN, успокойтесь.