Одно предложение «CROSS JOIN» представляет собой обычное перемножение записей из двух разных таблиц. Есть таблица слева от выражения, есть таблица справа от выражения. Каждый результат перемножения — это отдельная запись в новой результирующей таблице. Количество столбцов увеличивается.
Если мы хотим перемножить результаты трёх разных таблиц, то нам нужно использовать два предложения «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; -- Таблица № 3 create table test.t03 ( id int, value text, primary key (id) ); insert into test.t03 values (1, 'qa'); insert into test.t03 values (2, 'ws'); insert into test.t03 values (4, 'ed'); SELECT * FROM test.t03;
Типы данных повторяются во всех трёх таблицах, чтобы было проще понять.
Каждая таблица содержит по три записи. Значит в итоговом результате должно появиться 27 записей. Давайте смотреть на скриншот:
SELECT * FROM test.t01 CROSS JOIN test.t02 CROSS JOIN test.t03;
Перемножение записей осуществляется последовательно в порядке появления записей в таблицах.
Сначала мы берём первую запись из первой таблицы, первую запись из второй таблицы и первую запись из третьей таблицы.
Реже всего чередуются записи из первой таблицы в выражении с двумя и более «CROSS JOIN«. Чаще всего чередуются записи из последней таблицы в выражении с двумя и более «CROSS JOIN«. Это если смотреть на итоговый результат визуально.
Если сравнивать это поведение с каким-либо обычным языком программирования, то это похоже на 3 вложенных цикла.