连结(join)操作有好几种类型,很容易混淆掉的,今天我做一总结,以做更深层次的理解。
从联结约束检举程序上来分,联结操作可以有以下三种:
A、条件联结:联结时要有联结条件的
B、同等联结:联结时要求两个属性值必须相等
C、笛卡儿积(cross join 交叉联结):无须满足任何条件。
下面我列出在RDBS中有可能遇到的各种JOIN操作的类型:
1、内联结:对两个关系进行联结,返回匹配的元祖。
2、外联结:分为左、右、全外联结,至少返回FROM子句所列出的其中的一个表或视图的全部行——只要那些行满足全部的WHERE搜索条件。但左、右、全外联结返回结果大有不同,下面分作解释。
左外联结:返回位于联结操作符左侧的那个表的全部行;
右外联结:对两个关系进行联结,返回匹配的元祖和位于联结操作符右侧的那个表的全部元祖;
全外联结:返回位于联结操作符左、右两侧的两个表的所有元祖。
注意:不匹配的行的属性值将返回为空值,比如某字段不匹配,将以空值null的形式显示于结果中。
3、叉积联结:对两个关系进行联结,把第一个关系里的每一个元祖映射到另一个关系里的全部元祖上。
4、并,对两个有着同样结构的关系进行联结,只返回满足条件的匹配,相当于数据集合理论中的“并”操作。
5、交,对两个有着同样结构的关系进行联结,只返回不满足条件的匹配,相当于数据集合理论中的“交”操作。