Предложение «CROSS JOIN» представляет собой обычное перемножение записей из двух разных таблиц. Каждый результат перемножения — это отдельная запись в новой результирующей таблице. Количество столбцов увеличивается.
Есть две таблицы:
-- Таблица № 1 create table test.t01 ( id int, name text, primary key(id) ); insert into test.t01 values (1, 'A'); insert into test.t01 values (2, 'B'); insert into test.t01 values (3, 'C'); SELECT * FROM test.t01; -- Таблица № 2 create table test.t02 ( id int, name text, primary key(id) ); insert into test.t02 values (1, 'xxx'); insert into test.t02 values (3, 'yyy'); insert into test.t02 values (5, 'zzz'); SELECT * FROM test.t02;
Обратите внимание, что у второй таблицы первичные ключи идут не последовательно. Типы данных повторяются, чтобы было проще понять.
Каждая таблица содержит по три записи.
То есть при простом перемножении через CROSS JOIN мы получим 9 записей в новой таблице (в новом результате соединения) и 4 столбца.
SELECT * FROM test.t01 CROSS JOIN test.t02;
Здесь важно, что сначала перебираются записи первой таблицы, а затем перебираются записи второй. Расположение таблиц относительно предложения «CROSS JOIN» влияет на итоговый результат.
SELECT * FROM test.t02 CROSS JOIN test.t01;
В результирующем варианте таблицы мы получаем 4 столбца, в которых повторяются пары имён столбцов.
Другие способы получения подобного соединения
Выражение «INNER JOIN ON (true)»
SELECT * FROM test.t01 INNER JOIN test.t02 ON (true);
Выражение «FULL JOIN ON (true)»
SELECT * FROM test.t01 FULL JOIN test.t02 ON (true);
Выражение «LEFT JOIN ON (true)»
SELECT * FROM test.t01 LEFT JOIN test.t02 ON (true);
Выражение «RIGHT JOIN ON (true)»
SELECT * FROM test.t01 RIGHT JOIN test.t02 ON (true);