为了账号安全,请及时绑定邮箱和手机立即绑定

左、右、外、内连接的区别是什么?

左、右、外、内连接的区别是什么?

慕斯王 2019-07-03 18:46:11
左、右、外、内连接的区别是什么?我想知道如何区分所有这些不同的连接.。
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

简单例子:让我们说你有一个Students桌子,和Lockers桌子。在SQL中,在联接中指定的第一个表,Students,是左边第二张桌子,Lockers,是右(边),正确的桌子。

每个学生都可以被分配到一个储物柜,所以有一个LockerNumber列中的Student桌子。一个以上的学生可能在一个单独的储物柜里,但特别是在学年开始的时候,你可能会有一些没有储物柜的学生,还有一些没有分配学生的储物柜。

为了这个例子,让我们假设100名学生其中有70个有储物柜。你总共50个储物柜其中40个至少有1个学生,10个储物柜没有学生。

内连接等于“让我看看所有带着储物柜的学生".
任何没有储物柜的学生或没有学生的储物柜都失踪了。
返回70行

左外连接会是“让我看看所有的学生,如果他们有相应的储物柜的话。". 
这可能是一个普通的学生名单,或者可以用来识别没有储物柜的学生。
返回100行

右外连接会是“把所有的储物柜都给我看看,如果有的话,还有分配给他们的学生。". 
这可以用来识别没有分配学生的储物柜,或者有太多学生的储物柜。
返回80行(列出40个储物柜中的70个学生,加上10个没有学生的储物柜)

全外连接会很傻而且可能没什么用。
就像“让我看看所有的学生和所有的储物柜,并在你能找到的地方匹配它们。
返回110行(所有100名学生,包括那些没有储物柜的学生。加上十个没有学生的储物柜)

交叉连接在这种情况下也相当愚蠢。
它不使用链接lockernumber在“学生”表中的字段中,因此您最终会得到一个巨大的列表,列出每个可能的学生对更衣室配对,不管它是否真的存在。
返回5000行(100名学生x50个储物柜)。可能是有用的(过滤)作为一个起点,使新学生与空的储物柜相匹配。


查看完整回答
反对 回复 2019-07-03
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

只有四种:

  1. 内连接

    最常见的类型。对于在联接条件下匹配的每一对输入行,都会产生一个输出行。
  2. 左外连接

    :与内部联接相同,但如果在右边的表中找不到匹配行,则输出一行,其中包含左侧表中的值。

    NULL

    对于右边表中的每个值。这意味着左边表中的每一行将在输出中至少出现一次。
  3. 右外连接

    *与左外部联接相同,但表的角色反转除外。
  4. 全外连接

    左、右外接的组合。两个表中的每一行将至少在输出中出现一次。

“交叉联接”或“笛卡儿联接”只是一个内部联接,没有为其指定任何连接条件,从而输出所有对行。

感谢RusselH指出了完整的联接,我忽略了这一点。


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 723 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信