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