Что делает оператор CROSS JOIN в SQL?

«Что делает оператор CROSS JOIN в SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CROSS JOIN — это оператор SQL, который возвращает декартово произведение двух таблиц. Каждая строка из левой таблицы соединяется с каждой строкой из правой таблицы.

Синтаксис и результат:

-- Явный синтаксис
SELECT *
FROM employees
CROSS JOIN departments;

-- Неявный синтаксис (через запятую)
SELECT *
FROM employees, departments;

Если в таблице employees 3 строки, а в departments — 4, то результат CROSS JOIN будет содержать *3 4 = 12 строк**.

Когда используется (практические примеры):

  1. Генерация всех возможных комбинаций: Например, для создания полного набора тестовых данных или сетки дат и продуктов.
    -- Генерация всех комбинаций размеров и цветов
    SELECT sizes.size, colors.color
    FROM (VALUES ('S'), ('M'), ('L')) AS sizes(size)
    CROSS JOIN (VALUES ('Red'), ('Blue')) AS colors(color);
  2. Расчёт агрегатов по нескольким измерениям перед группировкой.

Важное предупреждение: Используйте CROSS JOIN с осторожностью. Соединение больших таблиц может мгновенно создать огромный результирующий набор (миллионы или миллиарды строк), что негативно скажется на производительности. В большинстве сценариев нужны осмысленные соединения с условием (ON или WHERE), такие как INNER JOIN или LEFT JOIN.