← Назад к вопросам

В чем разница между CROSS JOIN и INNER JOIN?

2.0 Middle🔥 151 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между CROSS JOIN и INNER JOIN

Это фундаментальные операции в SQL, которые работают принципиально по-разному.

CROSS JOIN (Декартово произведение)

CROSS JOIN создаёт декартово произведение — каждая строка из первой таблицы объединяется с каждой строкой из второй таблицы.

Характеристики:

  • Не требует условия ON (синтаксис: FROM table1 CROSS JOIN table2)
  • Возвращает все возможные комбинации строк
  • Количество результатов = (кол-во строк в table1) × (кол-во строк в table2)
  • Исходящий набор очень большой даже при малых таблицах

Пример:

SELECT * FROM employees CROSS JOIN departments;

Если в employees 100 строк, а в departments 5, получим 500 строк.

Практическое использование: генерирование комбинаций (размеры и цвета товаров, времена и дни недели).

INNER JOIN (Объединение по условию)

INNER JOIN объединяет таблицы на основе условия соответствия в предложении ON.

Характеристики:

  • Требует явное условие ON (например, ON table1.id = table2.id)
  • Возвращает только строки, удовлетворяющие условию
  • Исключает строки, не имеющие соответствия в обеих таблицах
  • Размер результата зависит от количества совпадений

Пример:

SELECT e.name, d.dept_name 
FROM employees e 
INNER JOIN departments d ON e.dept_id = d.id;

Вернёт только сотрудников, у которых есть назначенный отдел.

Ключевые различия

АспектCROSS JOININNER JOIN
УсловиеНет (или всегда TRUE)Требуется ON
ЛогикаВсе комбинацииТолько совпадения
Размер результатаВсегда M × NЗависит от данных
ПроизводительностьМожет быть экспоненциально большойЭффективнее при индексах
Частота использованияРедкоОчень часто

Сравнение производительности

CROSS JOIN на таблицах 1000 × 1000 строк даст 1 млн результатов и требует памяти. INNER JOIN с правильными индексами может вернуть 10-100 строк почти мгновенно.

Практический совет

При анализе системы: если видишь CROSS JOIN в production запросе — это почти всегда ошибка. INNER JOIN — стандартная операция для связей между сущностями. Используй CROSS JOIN только когда явно нужны все комбинации.