知识卡片

自然连接与三种外连接对悬浮元组的处理差异

普通读书笔记卡

内容

自然连接是等值连接的特例:自动找出两个关系的所有共同属性,以这些属性相等 为条件做连接,再去掉重复的列。它有一个容易被忽略的副作用——如果一方的 某条元组在另一方找不到匹配(属性值相等的对象),这条元组会被直接舍弃, 这类”没有匹配上、被连接结果排除掉”的元组称为悬浮元组。这个”默认丢弃不 匹配项”的行为在很多场景下是不合适的:比如要统计”每个学院有多少学生”, 用自然连接会让没有任何学生的学院直接从结果里消失,而不是显示为0——外 连接就是为解决这个问题而存在的。左外连接保留左边(被参照的第一个)关系 的全部悬浮元组,右外连接保留右边关系的全部悬浮元组,全外连接两边悬浮 元组都保留;无论哪种外连接,找不到匹配值的属性位置都统一填NULL,而不是 省略整条记录。理解”外连接的价值是保留本该被丢弃的一侧”这一点,是判断 什么时候该用普通连接、什么时候必须用外连接的关键:只要业务问题里包含 “哪怕没有关联数据也要显示出来”(如没有学生的学院、没有订单的客户), 就必须用对应方向的外连接,普通的自然连接会悄悄把这些情况从结果里删掉, 且不会报错提示。

参考来源

- 位置:《数据库原理(微课版)》第2章《关系数据库》2.4.2节"专门的关系运算" (源文件:_epub-src/index_split_002.html) - 结论依据:原文说明"在进行自然连接时,R中某些元组有可能在S中不存在与 属性集A值相等的元组,因此这些不匹配的元组会被舍弃……这些被舍弃的元组 成为悬浮元组。如果想把悬浮元组同样保留在连接的结果里,就要用到另外 一种连接类型——外连接",并区分了左外连接、右外连接、全外连接分别保留 哪一侧的悬浮元组,因此可以推出自然连接与外连接在处理不匹配元组上的 关键差异。 - 原始内容:这些被舍弃的元组成为悬浮元组。如果想把悬浮元组同样保留在 连接的结果里,就要用到另外一种连接类型——外连接……如果保留R中的悬浮 元组,则为左外连接;如果保留S中的悬浮元组,则为右外连接;如果保留R和 S中的全部元组,则为全外连接。