SQL JOIN: соединение таблиц
Коротко: JOIN соединяет строки двух таблиц по условию, обычно по равным значениям ключей. Так можно запрашивать вместе данные, хранящиеся раздельно.
Подробнее: Пример: таблицы customer(id, name) и orders(id, customer_id, amount). С ON orders.customer_id = customer.id заказы связываются с именами клиентов.
Подробности
- INNER JOIN: Только строки, у которых есть пара с обеих сторон. Клиенты без заказов отсутствуют.
- LEFT JOIN: Все строки левой таблицы, даже без пары. Недостающие значения справа —
NULL. СWHERE orders.id IS NULLнаходят клиентов без заказов. - RIGHT JOIN: Зеркальный вариант. Обычно пишется как LEFT JOIN с переставленными таблицами.
- FULL OUTER JOIN: Все строки обеих сторон, NULL для недостающих пар.
- CROSS JOIN: Каждая строка с каждой (декартово произведение). Осторожно: n × m строк.
- SELF JOIN: Соединение таблицы с самой собой, например сотрудники и их руководители.
- Ловушки: Без условия возникает декартово произведение. При связях 1:n строки размножаются и суммы становятся неверными. В LEFT JOIN условие фильтрации по правой таблице относится в
ON, а не вWHERE. - Скорость: Индексируйте столбцы внешних ключей (индекс SQL).
См. также: SQL, оптимизация запросов с EXPLAIN