关系代数是关系型数据库的理论基础,本文只涉及了连接运算,描述了内连接,左外连接,右外连接,全外连接等等这些让很多人困惑的概念。
本文可以说是Paul Nielsen《Microsoft SQL Server 2000 Bible》中相关章节的读书笔记,大部分的内容是摘抄原文。
原书的代码是SQL Server的,文中也给出了Informix的例子,相信对其他的关系型数据库产品也有参考价值。1.关系代数
合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的。 在关系代数的形式化语言中:- 用表、或者数据集合表示关系或者实体。
- 用行表示元组。
- 用列表示属性。
- 选取――返回满足指定条件的行。
- 投影――从数据集合中返回指定的列。
- 笛卡尔积――是关系的乘法,它将分别来自两个数据集合中的行以所有可能的方式进行组合。
- 并――关系的加法和减法,它可以在行的方向上合并两个表中的数据,就像把一个表垒在另一个表之上一样。
- 交――返回两个数据集合所共有的行。
- 差――返回只属于一个数据集合的行。
- 连接――在水平方向上合并两个表,其方法是:将两个表中在共同数据项上相互匹配的那些行合并起来。
- 除――返回两个数据集之间的精确匹配。
2.使用连接
2.1 连接类型
在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。连接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。 SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。| 连接类型 | 定义 |
| 内连接 | 只连接匹配的行 |
| 左外连接 | 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行 |
| 右外连接 | 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行 |
| 全外连接 | 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。 |
| (H)(theta)连接 | 使用等值以外的条件来匹配左、右两个表中的行 |
| 交叉连接 | 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配 |
在关系型数据库中使用连接运算来自网络,仅供参考。
