GBase 8a
其他
文章
精选

为什么说“内连接”和“外连接”是表连接的两大基本类型,而“左连接”、“右连接”、“全连接”是外连接的子类?

发表于2026-03-18 10:12:1132次浏览5个评论

“内连接”和“外连接”是表连接的两大基本类型,而**“左连接”、“右连接”、“全连接”是外连接的子类**,这种分类是基于 SQL连接操作的“结果集构成逻辑”和“表间关系保留方向” 的严格定义。

一、为什么是两大基本类型?

这两大类型是根据 “连接结果集中包含哪些行”的根本逻辑 来划分的,它们代表了两种截然不同的数据关联哲学。

基本类型核心逻辑结果集构成数学类比
内连接 (INNER JOIN)“匹配则留,不匹配则弃”

只返回两个表中都与连接条件匹配的行

 

集合的交集 (Intersection)
外连接 (OUTER JOIN)“以一方为主,匹配则关联,不匹配则补空”

返回一个表(或两个表)的所有行,并根据条件尝试关联另一个表,无匹配则用NULL填充。

 

集合的扩展 (Extended Union)

“SQL 提供的链接查询分为内连接(Inner Join)和外连接(Outer Join)两大类型。”

  • 内连接只返回两个表中与连接谓词匹配的行,不匹配的行不会被输出。”

     

  • 外连接可以将左表或右表中不匹配的行输出。”

     

这是最顶层的分类,因为任何连接操作,其结果要么是“只要匹配的”(内连接),要么是“即使不匹配也要保留一部分的”(外连接),没有第三种根本逻辑。

二、为什么“左/右/全连接”是外连接的子类?

因为“左连接”、“右连接”、“全连接”是 外连接这一基本类型下,根据“具体要保留哪个表的所有行”这一不同策略 进一步细分的。它们共享“保留不匹配行”的外连接核心逻辑,但在保留方向上有所不同。

可以将它们理解为外连接的三种具体“模式”或“策略”:

外连接子类核心策略保留方向结果集构成文档示例与说明
左外连接 (LEFT OUTER JOIN)“左表为主,右表为辅”保留左表全部行。

左表所有行 + 匹配的右表行(无匹配则右表列补NULL)。

 

左外连接:结果集取左表中全部的行,如右表中没有符合条件的对应则填充null。”

 

右外连接 (RIGHT OUTER JOIN)“右表为主,左表为辅”保留右表全部行。

右表所有行 + 匹配的左表行(无匹配则左表列补NULL)。

 

右外连接:结果集取右表中全部的行,如左表中没有符合条件的对应则填充null。”

 

全外连接 (FULL OUTER JOIN)“两者皆为主,一个都不能少”保留左表和右表的全部行。

左表所有行 ∪ 右表所有行(匹配的关联,不匹配的各自补NULL)。

 

全连接:结果集取两张表中全部的行,如没有符合条件的对应项则填充null。”

 

 

总结

  1. 两大基本类型(内/外) 的划分依据是 “结果集是否包含不匹配的行”,这是连接操作最根本的二分法。

  2. 外连接的三个子类(左/右/全) 的划分依据是 “具体要保留哪个表的不匹配行”,它们是对外连接这一基本类型在不同应用场景下的具体实现。

理解这种层次关系对于正确编写和理解SQL连接查询至关重要:

  • 当你说“使用外连接”时,你必须进一步明确是左、右还是全外连接。

  • 而“内连接”本身就是一个明确的、无需再细分的操作。

这种分类体系是SQL标准的一部分,被所有主流关系型数据库(包括GBase 8a)所遵循。

评论

登录后才可以发表评论
用户头像
GBase用户28017发表于 1个月前
优秀
用户头像
柒柒天晴发表于 1个月前
起飞了啊
用户头像
柒柒天晴发表于 1个月前
优秀
GBase用户47954发表于 1个月前
感谢作者的精彩分享!
流泪猫猫头发表于 4小时前
学习了。