EMZETT.
Войти

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