提要:在本教程中,您将学习如何使用 PostgreSQL 的 CROSS JOIN 为两个或多个表的行生成笛卡尔积。

PostgreSQL CROSS JOIN 简介

CROSS JOIN (交叉连接)子句允许您在两个或多个表中生成行的笛卡尔乘积。

INNER JOINLEFT JOIN 等不同,CROSS JOIN 不需要指定任何连接条件。

假设要为 T1T2 两张表执行交叉连接,两张表的每一行都将执行笛卡尔乘积,结果集的每一行都包含 T1 表的全部字段和 T2 表的全部字段。如果 T1 表有 N 行记录, T2 表有 M 行记录,那么,交叉连接的结果将有 N * M 行记录。

以下是交叉连接的语法:

SELECT * 
FROM T1
CROSS JOIN T2;

它和下面的语法等效:

SELECT * 
FROM T1, T2;

也可以在 INNER JOIN 里指定 true 为连接条件,来执行交叉连接。

SELECT *
FROM T1
INNER JOIN T2 ON TRUE;

PostgreSQL CROSS JOIN 示例

下面的代码创建了 T1T2 表,并插入了一些示例数据,用于演示交叉连接:

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);

下面的代码演示了如何在 T1T2 表进行交叉连接:

SELECT
 *
FROM
 T1
CROSS JOIN T2;
label | score
-------+-------
 A     |     1
 B     |     1
 A     |     2
 B     |     2
 A     |     3
 B     |     3
(6 rows)

下图展示了两表交叉连接的过程:

交叉连接

相关主题

下一篇:PostgreSQL的GROUP BY