Несколько таблиц и self join
138 мин
Многие вопросы требуют не двух, а трёх-четырёх таблиц. А иногда таблицу нужно соединить с ней самой.
JOIN по цепочке
Каждый JOIN добавляет к результату ещё одну таблицу. Студент → группа → факультет:
Через промежуточную таблицу (M:N) — студент, предмет и оценка:
Для каждого JOIN пишется свой ON. Стройте цепочку по схеме: каждая следующая таблица должна соединяться с уже подключёнными.
Self join — таблица сама с собой
В базе company руководитель сотрудника хранится в той же таблице employees (manager_id). Чтобы увидеть сотрудника и его руководителя рядом, берём таблицу дважды с разными псевдонимами:
e — в роли сотрудника, m — в роли руководителя. Без псевдонимов такой запрос не написать.
Расчёт по нескольким таблицам
Четыре таблицы: строки заказов → заказы → товары → категории. Выручка каждой категории по доставленным заказам:
Выведите для каждой оценки значение score, first_name студента и название предмета (subjects.name).
Для каждого сотрудника выведите его first_name и first_name его руководителя (для сотрудников, у которых он есть).
Для каждой завершённой поездки выведите first_name водителя, model машины и fare.
Запомните
- Каждая дополнительная таблица — ещё один
JOIN … ON …. - Self join: одна таблица, два разных псевдонима.
- Прежде чем писать запрос, найдите «путь» по схеме.