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.
Анекдоты по теме
— Что такое SELF JOIN? — Таблица, которая джойнится сама с собой. — Зачем? — Найти всех сотрудников и их менеджеров из одной таблицы employees: SELECT e.name, m.name AS manager FROM employees e JOIN employees m ON e.manager_id = m.id;
— Что такое lateral join? — Это когда правая часть JOIN может ссылаться на строки из левой. — Зачем? — Классика: для каждого пользователя — его последние 3 заказа. SELECT u.*, o.* FROM users u, LATERAL (SELECT * FROM orders WHERE user_id = u.id ORDER BY date DESC LIMIT 3) o;
— Сколько джойнов нужно для счастья? — Один INNER JOIN и хороший индекс на колонку связи.