CROSS JOIN - це тип JOIN, який повертає всі можливі комбінації рядків з двох таблиць. Тобто кожен рядок з першої таблиці буде поєднаний з кожним рядком з другої таблиці. Через це кількість рядків у результаті дорівнює: кількість рядків першої таблиці × кількість рядків другої таблиці.
Розберемо приклад
Ми маємо дві таблиці: users і plans. Наша задача полягає в тому, щоб отримати всі можливі пари користувачів і тарифів. Для цього ми будемо використовувати CROSS JOIN.
-- users
id | name
------------
1 | Alice
2 | Bob
-- plansœ
id | plan_name
-------------------
1 | Basic
2 | Premium
3 | Enterprise
Запит буде мати наступний вигляд. Давайте розберемо його детальніше:
-- Вибираємо стовпці, які хочемо бачити в результаті:
-- name - з таблиці users
-- plan_name - з таблиці plans
SELECT
users.name,
plans.plan_name
FROM
users
-- Робимо CROSS JOIN - тобто беремо кожен рядок з таблиці users
-- і поєднуємо його з КОЖНИМ рядком з таблиці plans
CROSS JOIN
plans;
В результаті виконання запиту, ми отримаємо такий результат: Alice поєдналася з усіма тарифами і так само Bob поєднався з усіма можливими тарифами.
name | plan_name
-------------------------
Alice | Basic
Alice | Premium
Alice | Enterprise
Bob | Basic
Bob | Premium
Bob | Enterprise
Важливо пам’ятати
CROSS JOIN може дуже швидко створити велику кількість рядків. Наприклад, якщо в першій таблиці 100 рядків, а в другій 200, то результат буде містити вже 20 000 рядків. Тому його потрібно використовувати обережно.