Перекрёстное соединение (CROSS JOIN
)
Перекрёстное соединение или декартово произведение.Каждая строка левой таблицы соединяется с каждой строкой правой таблицы.
<cross-join> ::= <table-reference> [, <table-reference> ...] | <table-reference> CROSS JOIN <table-primary>
Обратите внимание, что синтаксис с использованием запятой является устаревшим.
Перекрёстное соединение двух наборов эквивалентно их соединению по условию тавтологии (условие, которое всегда верно).
Следующие два запроса дадут один и тот же результат:
SELECT *
FROM TA
CROSS JOIN TB;
SELECT *
FROM TA
JOIN TB ON 1 = 1;
Перекрёстные соединения являются внутренними соединениями, потому что они отбирают строки, для которых есть соответствие — так уж случилось, что каждая строка соответствует! Внешнее перекрёстное соединение, если бы оно существовало, ничего не добавило бы к результату, потому что внешние соединения добавляют записи, по которым нет соответствия, а они не существуют в перекрёстном соединении.
Перекрёстные соединения редко полезны, кроме случаев, когда вы хотите получить список всех возможных комбинаций двух или более переменных.Предположим, вы продаёте продукт, который поставляется в различных размерах, различных цветов и из различных материалов.Если для каждой переменной значения перечислены в собственной таблице, то этот запрос будет возвращать все комбинации:
SELECT
m.name,
s.size,
c.name
FROM materials m
CROSS JOIN sizes s
CROSS JOIN colors c