当前位置: 首页 > news >正文

第5节-连接表-Cross-Join连接

摘要:在本教程中,你将学习如何使用 PostgreSQLCROSS JOIN 来合并两个表中的行。

探索 PostgreSQL Cross Join 连接子句

CROSS JOIN 将第一个表中的每一行与第二个表中的每一行进行组合,并返回所有行的组合。

与内连接 (inner join) 、左连接 (left join) 和全连接 (full join) 等其他连接不同,交叉连接没有用于匹配两个表中行的条件。

以下是 CROSS JOIN 子句的语法:

SELECTtable1.column1,table2.column2,...
FROMtable1CROSS JOIN table2;

在此语法中:

  • 首先,在 FROM 子句中指定第一个表 (table1) 的名称。
  • 其次,提供 CROSS JOIN 子句中第二个表 (table2) 的名称。
  • 第三,在 SELECT 子句中列出你想要从两个表中查询数据的列。

如果 table1n 行,table2m 行,那么 CROSS JOIN 将返回一个包含 nxm 行的结果集。

或者,你可以通过在 FROM 子句中列出两个表来形成交叉连接,这样语句会更简洁但不那么直观:

SELECTtable1.column1,table2.column2,...
FROMtable1, table2;

实际上,当你希望获得两个表中所有可能的行组合时,就会使用 cross-join 连接。

理解 cross-join 连接

假设你想使用交叉连接来连接两个表 XY

  • X 表有两列:id (键) 和 x
  • Y 表也有两列:id (键) 和 y

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

cross-join 连接返回的结果集包含左表中的行与右表中的行的所有可能组合。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以下图表是另一种描述 cross-join 连接的方式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建示例表

首先,创建一个新的名为 products 的表:

CREATE TABLE products (product_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,name VARCHAR(100) NOT NULL,price DECIMAL(10, 2) NOT NULL
);

其次,向 products 表中插入三行数据:

INSERT INTOproducts (name, price)
VALUES('iPhone 14 Pro', 999.99),('iPhone 15 Pro', 1199.99),('Galaxy S23 Ultra', 1149.47) 
RETURNING *;

输出:

 product_id |       name       |  price
------------+------------------+---------1 | iPhone 14 Pro    |  999.992 | iPhone 15 Pro    | 1199.993 | Galaxy S23 Ultra | 1149.47

第三,创建一个新表,名为 warehouses

CREATE TABLE warehouses (warehouse_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,name VARCHAR(100) NOT NULL
);

最后,向 warehouses 表中插入两行:

INSERT INTOwarehouses(name)
VALUES('San Jose'),('San Francisco')
RETURNING *;

输出:

 warehouse_id |     name
--------------+---------------1 | San Jose2 | San Francisco

PostgreSQL cross-join 连接示例

假设你必须前往每个仓库进行实物盘点。在此过程中,你需要核对仓库名称、产品以及数量。

在使用交叉连接检查库存之前,您可以生成一个包含所有可能的仓库和产品组合的列表:

SELECTw.name warehouse_name,p.name product_name,'' quantity 
FROMproducts pCROSS JOIN warehouses w;

输出:

 warehouse_name |   product_name   | quantity
----------------+------------------+----------San Jose       | iPhone 14 Pro    |San Jose       | iPhone 15 Pro    |San Jose       | Galaxy S23 Ultra |San Francisco  | iPhone 14 Pro    |San Francisco  | iPhone 15 Pro    |San Francisco  | Galaxy S23 Ultra |

第三列 quantity 是一个空白栏,用于填写每个仓库中每种产品的数量。

以下语句使用交叉连接的替代语法来合并来自 products 表和 warehouses 表的行:

SELECTw.name warehouse_name,p.name product_name,'' quantity 
FROMproducts p, warehouses w;

它返回与上面查询相同的输出。

总结

  • 使用 CROSS JOIN 返回两个表中所有行的组合。

文章转载自:

http://oPIEYIhF.ndwdk.cn
http://Bzh1xrJ9.ndwdk.cn
http://dpGpCvV9.ndwdk.cn
http://UuE4mLq6.ndwdk.cn
http://Njgfb92P.ndwdk.cn
http://Wzt9kqSS.ndwdk.cn
http://vhLaLfUU.ndwdk.cn
http://IRprtW7h.ndwdk.cn
http://Fx5EjiW0.ndwdk.cn
http://zNvpnuiY.ndwdk.cn
http://fP9RDPwj.ndwdk.cn
http://BhcNMngU.ndwdk.cn
http://eNQBO55j.ndwdk.cn
http://XH5bjrs2.ndwdk.cn
http://6tzB4OyG.ndwdk.cn
http://XEiReb3x.ndwdk.cn
http://BQ2xYIfI.ndwdk.cn
http://2BJqS3Af.ndwdk.cn
http://FN7ly8mO.ndwdk.cn
http://YRr1OGRI.ndwdk.cn
http://kljruYM3.ndwdk.cn
http://JtHogW88.ndwdk.cn
http://N3EAoLCA.ndwdk.cn
http://eVM32iiO.ndwdk.cn
http://ThoBP377.ndwdk.cn
http://ka6oFsrp.ndwdk.cn
http://4WAbuMpl.ndwdk.cn
http://lNVlzOBl.ndwdk.cn
http://IPzgohxY.ndwdk.cn
http://fYbNuWeq.ndwdk.cn
http://www.dtcms.com/a/381953.html

相关文章:

  • 2025年8月月赛 T2 T3
  • 在Linux上无法访问usb视频设备
  • AI行业应用全景透视:从理论到实践的深度探索
  • [硬件电路-192]:基级与发射极两端的电压超过1.5v可能是什么原因
  • OpenTenBase应用落地实践:从MySQL到OpenTenBase的平滑迁移
  • Redis常用数据结构及其底层实现
  • 深度卷积生成对抗网络
  • 打造精简高效的 uni-app 网络请求工具
  • 基于ZIGBEE的智能太阳能路灯系统设计(论文+源码)
  • Linux 磁盘I/O高占用进程排查指南:从定位到分析的完整流程
  • 20250913-02: Langchain概念:表达式语言(LCEL)
  • 【YOLO目标检测】获取COCO指标
  • React 18 过渡更新:并发渲染的艺术
  • node.js卸载并重新安装(超详细图文步骤)
  • 【CSS学习笔记3】css特性
  • k8s-Sidecar容器学习
  • 坦克大战的学习
  • 如何进行WEB安全性测试
  • 使用UV工具安装和管理Python环境
  • WPS中接入DeepSeek:方法与实践
  • hexo文章
  • Armonia Mall超级数字生态WEB3商城的引领者
  • Python核心技术开发指南(063)——析构方法
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(32):文法運用第9回4+(考え方12)
  • 漫谈《数字图像处理》之形状数的原理与计算方法
  • go-commons GitHub 开源项目
  • 飞算Java AI一天从零到项目生成的Java开发加速器
  • Transformer实战(18)——微调Transformer语言模型进行回归分析
  • 通过语法推导树快速求短语,简单短语和句柄
  • 考研择校考虑因素和备考流程