Короткий ответ
CROSS JOIN соединяет каждую строку одной таблицы с каждой строкой другой без какого-либо условия, образуя декартово произведение; он полезен, когда нужно специально построить все комбинации, например, все пары «дата × товар» для последующего заполнения пропусков.
Как это работает подробнее
если в первой таблице M строк, а во второй N, результат CROSS JOIN содержит M×N строк — каждая строка первой таблицы сочетается с каждой строкой второй. Обычный JOIN с условием в ON — это, по сути, CROSS JOIN с последующей фильтрацией только совпадающих пар.
Пример кода
Запрос SQL
SELECT d.calendar_date, p.product_id
FROM calendar d
CROSS JOIN products p;Что использовать на практике
- На практике: осознанный
CROSS JOINчасто используют вместе с календарной таблицей дат, чтобы получить «все дни × все товары» и затем черезLEFT JOINподставить реальные продажи, явно показывая дни без продаж как 0, а не как отсутствие строки. - Результат: Для 30 дней и 10 товаров результат — ровно 300 строк.
- Проверка:
SELECT COUNT(*)результата должен равняться произведению количества строк вcalendarиproducts.
Подводные камни
- Частая ошибка: случайно получают декартово произведение, забыв условие
ONв обычномJOINили перепутав названия столбцов при соединении — это резко увеличивает число строк и искажает последующие суммы (например, SUM удваивается или умножается в разы).