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 от LEFT JOIN? Студент: — INNER JOIN — как друзья, которые общаются только если у них есть общие интересы. LEFT JOIN — как родственники: ты их не звал, но они всё равно есть.
Собеседование: — Что быстрее: JOIN или подзапрос? Ответ: зависит от оптимизатора, размера данных и индексов. Интервьюер: правильный ответ. Кандидат: но это же уход от ответа! Интервьюер: нет. Это понимание того, что серебряных пуль не существует.
Собеседование. Спрашивают: — В чём разница между LEFT JOIN и LEFT OUTER JOIN? Кандидат молчит 10 секунд. — Это одно и то же. Интервьюер: — Правильно. Просто хотел посмотреть на твоё лицо.