В чем разница между `CROSS JOIN` и `FULL [OUTER] JOIN` в SQL?

«В чем разница между `CROSS JOIN` и `FULL [OUTER] JOIN` в SQL?» — вопрос из категории Базы данных и SQL, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CROSS JOIN и FULL OUTER JOIN — это разные типы соединения таблиц в SQL, используемые для разных целей при тестировании и анализе данных.

  • CROSS JOIN (декартово произведение): Соединяет каждую строку первой таблицы с каждой строкой второй. Условие ON не используется.

    -- Создает все возможные комбинации цветов и размеров
    SELECT * FROM Colors CROSS JOIN Sizes;
    -- Результат: (Red, S), (Red, M), (Red, L), (Blue, S), (Blue, M)...

    Применение в QA: Полезен для генерации exhaustive-тестовых данных, когда нужно проверить все комбинации параметров.

  • FULL OUTER JOIN (полное внешнее соединение): Возвращает все строки из обеих таблиц. Строки, для которых есть совпадение по условию ON, объединяются. Строки без совпадений дополняются NULL.

    -- Найти всех сотрудников и все проекты, даже если они не связаны
    SELECT e.name, p.project_name
    FROM Employees e
    FULL OUTER JOIN Projects p ON e.id = p.lead_id;
    -- В результат попадут сотрудники без проектов И проекты без ответственных

    Применение в QA: Используется для сравнения двух наборов данных (например, данных из источника и приемника после ETL-процесса) с целью выявления расхождений: какие записи есть только в источнике, только в приемнике или в обоих.