В этом уроке мы разберем операцию 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
следует аккуратно.
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.