Данная статья относится к циклу статей, посвященных PostgreSQL. В предыдущей статье мы говорили о полном внешнем объединении PostgreSQL. Теперь же мы углубимся в изучение перекрёстного объединения, именуемого CROSS JOIN и используемого для создания декартового произведения строк в объединяемых таблицах.
Введение в условие PostgreSQL CROSS JOIN
Условие CROSS JOIN позволяет вам создавать декартово произведение строк в двух или более таблицах. В отличие от других операторов объединения, таких как LEFT JOIN или INNER JOIN, в CROSS JOIN нет условия соответствия в предложении объединения.
Предположим, нам необходимо выполнить перекрёстное объединение двух таблиц T1 и T2. Для каждой строки из обеих таблиц, т.е. декартового произведения, набор результатов будет содержать строку, состоящую из всех столбцов таблицы T1, за которой следуют все столбцы таблицы T2. Если T1 имеет N строк, а T2 имеет M строк, то результирующий набор будет иметь N x M строк.
Следующий запрос отображает синтаксис вызова условия PostgreSQL CROSS JOIN:
SELECT *
FROM T1
CROSS JOIN T2;
Данный запрос эквивалентен запросу выше:
SELECT *
FROM T1, T2;
Вы можете использовать условие INNER JOIN вместе с условным значением true, чтобы выполнить перекрёстное объединение следующим образом:
SELECT *
FROM T1
INNER JOIN T2 ON TRUE;
Пример использования условия PostgreSQL CROSS JOIN
Следующий запрос создаёт таблицы T1 и T2, которые заполняются некоторыми данными при помощи операторов CREATE TABLE:
CREATE TABLE T1 (label CHAR(1) PRIMARY KEY);
CREATE TABLE T2 (score INT PRIMARY KEY);
INSERT INTO T1 (label)
VALUES
('A'),
('B');
INSERT INTO T2 (score)
VALUES
(1),
(2),
(3);
Для объединения таблицы T1 с таблицей T2, воспользуемся следующим запросом с использованием CROSS JOIN:
SELECT
*
FROM
T1
CROSS JOIN T2;
label | score
-------+-------
A | 1
B | 1
A | 2
B | 2
A | 3
B | 3
(6 rows)
Следующее изображение иллюстрирует работу оператора CROSS JOIN, когда мы объединяем таблицу T1 с таблицей T2:
На этом мы заканчиваем ознакомление с условием PostgreSQL CROSS JOIN и переходим к естественному объединению в PostgreSQL.
Источник: PostgreSQL Tutorial from Scratch