Перекрёстное объединение в PostgreSQL

Читать первым в Telegram

Данная статья относится к циклу статей, посвященных 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

Поддержать проект

Социальные сети проекта:

Подпишись, чтобы ничего не пропустить!