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 с соответствующей стороны.JOINОператор, объединяющий строки из двух и более таблиц по условию связи между ними.LEFT JOINВозвращает все строки из левой таблицы. Для строк без пары в правой — NULL.RIGHT JOINВозвращает все строки из правой таблицы. Для строк без пары в левой — NULL.
Анекдоты по теме
ORM говорит SQL: — Милый, я скрываю твою сложность за красивыми объектами. SQL: — А я из-за тебя генерирую запросы с 50 JOIN, которые выполняются час.
— Мой JOIN работает уже 40 минут. — Сколько строк в таблицах? — По миллиону. — Индекс есть? — Нет. — Ну и жди ещё 40.
Преподаватель: — Чем отличается INNER JOIN от LEFT JOIN? Студент: — INNER JOIN — как друзья, которые общаются только если у них есть общие интересы. LEFT JOIN — как родственники: ты их не звал, но они всё равно есть.