Зарегистрируйтесь, чтобы продолжить обучение

CROSS JOIN (перекрестное соединение) SQL: Join

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

Применяем CROSS JOIN

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

colors

color_id color_name
0 красный
1 синий

materials

material_id material_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_name material_name
красный хлопок
красный лен
красный шерсть
синий хлопок
синий лен
синий шерсть

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

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

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

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

cross-join

Выводы

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

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff