数据库的表连接2

一、简介。

上期我们提到SQL Server支持多种连接,包括 [内连接][左连接][右连接][全外连接][交叉连接]。 每种连接类型指定SQL Server如何使用一个表中的数据来选择另一个表中的行。 并且已经粗略的讲解过[内连接][左连接][右连接],所以本期,我们接着讲剩下的两个[全外连接][交叉连接]

二、交叉连接。

    交叉连接是以CROSS JOIN 连接两个或多个不相关的表。

以下是两个表的SQL Server CROSS JOIN 的语法:

CROSS JOIN 将第一个表(T1)中的每一行与第二个表(T2)中的每一行连接起来。 换句话说,交叉连接返回两个表中行的笛卡尔积

INNER JOINLEFT JOIN不同,交叉连接不会在连接的表之间建立关系。

假设 T1 表包含三行: 1 , 2 3 T2 表包含三行: A B C

CROSS JOIN 从第一个表(T1)获取一行,然后为第二个表(T2)中的每一行创建一个新行。 然后它对第一个表(T1)中的下一行执行相同操作,依此类推。

在此图中, CROSS JOIN 总共创建了 9 行。 通常,如果第一个表有 n 行,第二个表有 m 行,则交叉连接 将产生 n x m 行。

我举一个最简单的例子,比如我有3615条衬衫和6351条裤子,问:能有多少种搭配,

常人肯定是用乘法计算,但计算机是没有乘法概念的,计算机的乘法也是后面给计算机强加上的结果,计算机面对这种情况,会使用暴力破解,将所有的情况都一一列举出来,这也是评判计算机的好坏方法,计算机性能越好,能支持的计算数量就越多。数学界上,很多历史难题都是利用计算机的暴力破解,获取正确的结果后,反向逆推公式。

三、全外连接

    

橙色部分表示返回的结果集。

FULL OUTER JOIN当左表或右表中存在匹配项时,该命令将返回所有行。

下面创建一些示例表来演示全外连接。

首先,创建一个名为 pm 的新模式,它代表项目管理。

接下来,在 pm 模式中创建名为 projects members 的新表:

 假设每个成员只能参与一个项目,每个项目都有零个或多个成员。 如果项目处于构思阶段,则不会分配 任何成员。

然后,向 projects member 表中插入一些行记录:

之后,查询 projects member 表中的数据:

最后,使用 FULL OUTER JOIN 查询 projects member 表中的数据:

执行上面查询语句,得到以下结果:

在此示例中,查询返回参与项目的成员,不参与任何项目的成员以及没有任何成员的项目。

要查找不参与任何项目的成员和没有任何成员的项目,请在上述查询中添加 WHERE 子句:

执行上面查询语句,得到以下结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值