八月 31, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的CROSS JOIN
生成连接表中的行的笛卡尔积。
目录
PostgreSQL CROSS JOIN 子句简介
一个CROSS JOIN
子句允许您生成两个或多个表中的行的笛卡尔积。
与其他连接子句(例如 LEFT JOIN 或 INNER 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;
此外,您可以使用一个条件始终为true
的INNER 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 子句,对两个或多个表中的行生成笛卡尔积。