内部连接与外部连接
内部联接和外部联接是数据库查询处理中使用的两种SQL联接方法。它们属于连接子句家族(另外两个是左连接和右连接)。但是,有一个Self-Join可以用于特殊情况。Join的目的是使用两个表的公共值组合字段。这些联接将数据库中多个表中的记录合并在一起。它创建的结果集可以另存为另一个表。
什么是内部联接?
最常用的SQL联接操作是内部联接。它可以被认为是应用程序中使用的默认联接类型。内部联接使用联接谓词组合两个表。假设这两个表是A和B,那么连接谓词将比较A和B的行,以找出满足谓词的所有对。将A表和B表中所有满足条件的行的列值组合起来以创建结果。它可以看作是首先获取所有记录的交叉连接(笛卡尔积),然后只返回满足连接谓词的记录。然而,在现实中,笛卡尔积是不计算的,因为它是非常低效的。而是使用哈希联接或排序合并联接。
什么是外部联接?
与内部联接不同,外部联接保留所有记录,即使找不到匹配的记录。这意味着外部联接确实需要一个记录来找到匹配的记录,以便它出现在结果中。相反,它将返回所有记录,但不匹配的记录将具有空值。外部连接分为三个子类别。它们是左外联接、右外联接和全外联接。这种区别是基于在找到不匹配的记录时保留哪个表(左表、右表或两个表)的行。左外部联接(也称为简单的左联接)保留左表的所有记录。这意味着,即使匹配记录数为零,结果表中仍有记录,但B的所有列都将有空值。换句话说,左表中的所有值都将与右表中的匹配值一起返回(不匹配时返回空值)。如果左表中多行的值与右表中的一行匹配,则右表中的行将根据需要重复。右外部联接与左外部联接非常相似,但表的处理是受尊重的。这意味着结果将至少有一次右表的所有行具有匹配的左表值(对于不匹配的右表值,则为空值)。完全外部联接比左外部联接和右外部联接更全面。它的结果是将左、右外部连接在一起的效果结合在一起。
内部联接和外部联接有什么区别?