PostgreSQL 教程: CROSS JOIN 交叉连接

八月 31, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的CROSS JOIN生成连接表中的行的笛卡尔积。

PostgreSQL CROSS JOIN 子句简介

一个CROSS JOIN子句允许您生成两个或多个表中的行的笛卡尔积。

与其他连接子句(例如 LEFT JOININNER JOIN)不同,CROSS JOIN子句没有连接谓词。

假设您必须使用CROSS JOIN连接两个表 T1 和 T2。

如果 T1 有n行且 T2 有m行,则结果集将有n * m行。例如,T1 有1,000行,T2 有1,000行,结果集将有1,000 x 1,000=1,000,000行。

下面举例说明CROSS JOIN语法的语法结构:

SELECT select_list
FROM T1
CROSS JOIN T2;

下面的语句与上面的语句是等价的:

SELECT select_list
FROM T1, T2;

此外,您可以使用一个条件始终为trueINNER JOIN子句来模拟交叉连接:

SELECT *
FROM T1
INNER JOIN T2 ON true;

PostgreSQL CROSS JOIN 示例

以下 CREATE TABLE 语句创建 T1 和 T2 表,并插入一些示例数据以进行演示。

DROP TABLE IF EXISTS T1;
CREATE TABLE T1 (label CHAR(1) PRIMARY KEY);

DROP TABLE IF EXISTS T2;
CREATE TABLE T2 (score INT PRIMARY KEY);

INSERT INTO T1 (label)
VALUES
	('A'),
	('B');

INSERT INTO T2 (score)
VALUES
	(1),
	(2),
	(3);

以下语句使用CROSS JOIN运算符连接表 T1 和表 T2。

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 illustration

在本教程中,您学习了如何使用 PostgreSQL 的 CROSS JOIN 子句,对两个或多个表中的行生成笛卡尔积。