知识卡片
外连接是被null填充的"并"运算
内容
外连接天生就会在结果中产生NULL,因此通常应当避免使用,但理解它为什么会产生
NULL能帮助判断哪些情况下这种妥协是可以接受的。从关系理论角度看,外连接的本质
根本不是连接,而是一种”并”运算的变体——它强行让两张原本不满足”并”运算通常要求
(标题必须完全相同)的表参与并运算,做法是先给其中一张或两张表补上NULL值填充
缺失的列,让两边标题凑齐一致后再做并集。书中用等价改写直观说明这一点:外连接
S NATURAL LEFT OUTER JOIN SP配合COALESCE(PNO,'nil')得到的结果,可以完全
用纯粹的UNION加显式补NULL/占位值来手写复现——先取SP里所有(SNO,PNO)行,再
UNION上”S里那些完全没有出现在SP中的供应商编号,PNO列填一个占位值”这部分(用
‘nil’代替NULL同样能达到同样的展示效果)。这个等价关系揭示了外连接的真实身份:
它不是连接家族里的一个特例,而是”并”运算为了兼容不等标题的表所做的一种妥协,
只是约定俗成地选择用NULL作为默认填充值,理论上也完全可以像上面例子那样换成
任何有实际意义的占位值。
参考来源
- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第4章"不要重复,不要
null"4.6节"对外连接的说明"(源文件:OEBPS/text00048.html)
- 结论依据:原文明确"外连接天生就会在结果中产生null,因此通常应避免使用。从
关系理论角度,它是一种妥协:它迫使表参与一种'并'(没错,我说的就是并,不是
连接),即使所用的表不符合'并'的通常要求……通过在进行'并'之前向一个或全部
两个表填充null的方式,可实现对外联接,这样就可以使表满足通常的要求了",并
给出用UNION加显式占位值改写外连接的等价SQL示例。
- 原始内容:外连接天生就会在结果中产生null……从关系理论角度,它是一种妥协:
它迫使表参与一种"并",即使所用的表不符合"并"的通常要求……通过在进行"并"之前
向一个或全部两个表填充null的方式,可实现对外联接。