联接(CROSS JOIN、JOIN、OUTER JOIN)

本文详细介绍了SQL中的JOIN操作,包括交叉联接(CROSS JOIN)、内部联接(INNER JOIN)和外部联接(OUTER JOIN)。内部联接基于笛卡尔乘积和筛选,而外部联接则增加了添加外部行的步骤。文章讨论了各种联接类型的使用场景,如自联接、复合联接和多联接查询,以及如何在查询中处理缺失值。此外,还特别强调了正确使用JOIN防止误解为交叉联接的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JOIN 表运算符对两个输入表进行操作。联接的类型有交叉联接、内部联接和外部联接,它们的区别在于如何应用逻辑查询处理阶段。交叉联接仅应用一个阶段——笛卡尔乘积,内部联接应用两个阶段——笛卡尔乘积和筛选,外部联接应用三个阶段——笛卡尔乘积、筛选和添加外部行。

交叉联接(CROSS JOIN)

交叉联接仅执行一个逻辑查询处理阶段——笛卡尔乘积,这一阶段对提供的两个输入表进行操作,联接并生成两个表的笛卡尔乘积(将一个输入表的每一行与另一个表的所有行匹配,得到m×n行)。

 -- 如果为表分配了别名,那么使用完整表名称作为前缀是无效的
 SELECT A.City, B.Company FROM Cities A CROSS JOIN Companies B  -- 推荐
 SELECT A.City, B.Company FROM Cities A, Companies B

自联接是指联接同一个表的多个实例,自联接被所有基本联接类型支持(交叉联接、内部联接、外部联接)。

 -- 自联接中必须为表指定别名,否则联接结果中所有列名都将不明确
 SELECT A.City, A.CityID, B.City, B.CityID FROM Cities A CROSS JOIN Cities B

交叉联接的一种用途是生成数字表(一个整数数列结果集)。

IF OBJECT_ID(N'dbo.Digits', 'U') IS NOT NULL
    DROP TABLE dbo.Digits;

CREATE TABLE dbo.Digits
(
    digit INT NOT NULL <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值