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