SQL: Join

Теория: CROSS JOIN (перекрестное соединение)

В этом уроке мы разберем операцию CROSS JOIN. Этот тип соединения позволяет получить все возможные сочетания строк из двух таблиц.

Применяем CROSS JOIN

Рассмотрим пример. Допустим, у нас есть таблицы с цветами и материалами тканей:

colors

color_idcolor_name
0красный
1синий

materials

material_idmaterial_name
100хлопок
101лен
102шерсть

Тогда с помощью соединения CROSS JOIN мы можем построить результат, который состоит из всех возможных сочетаний цвета и материала:

SELECT
    color_name,
    material_name
FROM colors -- первая таблица
CROSS JOIN materials; -- вторая таблица

View on DBfiddle

Имя первой таблицы указывается после слова FROM. Следом идет инструкция CROSS JOIN и имя второй таблицы.

Результат выполнения запроса:

colors CROSS JOIN materials

color_namematerial_name
красныйхлопок
красныйлен
красныйшерсть
синийхлопок
синийлен
синийшерсть

CROSS JOIN соединяет каждую строку из первой таблицы с каждой строкой из второй таблицы. Поэтому число строк в результате — это произведение количества строк из первой таблицы с количеством строк из второй таблицы. В нашем случае получилось шесть строк — это все возможные сочетания для двух цветов и трех материалов: 2 * 3 = 6.

Следует осторожно пользоваться операцией CROSS JOIN, так как результат может оказаться очень большим. Если в исходных таблицах 20 и 30 тысяч строк, то в результате будет 600 миллионов строк. Даже если в запросе есть инструкция WHERE, СУБД может потратить много времени и ресурсов на формирование и фильтрацию ненужных значений.

С помощью схемы опишем работу CROSS JOIN в общем виде:

Схема работы CROSS JOIN. Результат содержит все сочетания пар

cross-join

Выводы

В этом уроке мы изучили первый тип соединения таблицы — CROSS JOIN. Оно полезно, когда необходимо получить все комбинации строк из двух таблиц. Число строк в результате может быть очень большим, поэтому использовать CROSS JOIN следует аккуратно.

Рекомендуемые программы