关系代数是数据库的理论基础,而**外连接(Outer Join)**是连接操作的重要扩展。要理解外连接,可以先从“内连接”说起,再对比“外连接”补齐缺失的信息。
关系代数中,连接(Join)本质上是:
例如:
S(Sno, Sname)SC(Sno, Cno)自然连接 S ⋈ SC:
内连接(即普通连接 / 自然连接)只保留:
两边都能匹配上的元组
这会导致:
但现实中我们常需要:
“即使没有匹配,也要保留某一侧的数据”
这就是外连接存在的意义。
外连接 = 内连接 + 未匹配上的元组补 NULL
用一句话理解:
外连接保证“至少一侧的表所有行都会出现结果中”
符号:⟕
含义:
NULL形式化:
R ⟕ S
= (R ⋈ S) ∪ (R − π_R(R ⋈ S)) × NULL(S)
直觉:
“左表一个都不能少”
符号:⟖
含义:
NULL符号:⟗
含义:
NULL可以把外连接想成:
学生表 S
| Sno | Sname |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
选课表 SC
| Sno | Cno |
|---|---|
| 1 | C1 |
| Sno | Sname | Cno |
|---|---|---|
| 1 | 张三 | C1 |
❌ 李四消失了
| Sno | Sname | Cno |
|---|---|---|
| 1 | 张三 | C1 |
| 2 | 李四 | NULL |
✅ 李四保留
外连接就是“连接时不丢人”,匹配不到就用 NULL 补位。
如果你愿意,我也可以用关系代数表达式推导或SQL 对比的方式再讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。