关系代数在 1970 年 E.F. Codd 发表数据的关系模型之前很少受到注意,Codd 提议这样一种代数作为数据库查询语言的基础。
Codd 代数的五个基本算子是选择(selection)、投影(projection)、笛卡尔积(Cartesian product,也称为叉积或交叉连接)、并集(set union)和差集(set difference)。
关系代数使用集合论中的 并集、_**差集 **_和 笛卡尔积 的概念,但对这些运算符添加了额外的约束。
- 对于_**并集 **_和 差集,所涉及的两个关系必须是 “并集兼容”(union-compatible) 的 —— 即这两个关系必须具有相同的属性集合。因为 交集 是根据 _**并集 **_和 差集 来定义的,所以 交集 所涉及的两个关系也必须是 “并集兼容” 的。
- 对于 笛卡尔积,所涉及的两个关系必须具有不相交的表头 —— 也就是说,它们不能具有共同的属性名称。
此外,笛卡尔积的定义与集合论中的定义不同,因为元组被认为是“弱”(shallow)的,用于操作。也就是说,一组 n 元组与一组 m 元组的笛卡尔积产生一组“扁平化”的 (n + m) 元组(而基本集合理论中会产生一组 2 元组,每个包含一个 n 元组和一个 m 元组)。更正式地,R × S 定义如下:
笛卡尔积的基数是其因子的基数的乘积,即 |R × S| = |R| × |S|。
投影是一种写作
Note: 当在 SQL 标准中实现时,“默认投影”返回的是一个多重集(multiset)而不是一个集合,消除重复数据的
$\Pi$ 投影是通过添加 DISTINCT 关键字获得的。
**广义选择 **是一种写成
要获得地址簿中所有朋友或商业伙伴的列表,选择可能写为
$\sigma _{{\text{isFriend = true}},\lor ,{\text{isBusinessContact = true}}}({\text{addressBook}})$ 。结果将是一个包含每个唯一记录的每个属性的关系,其中 isFriend 为真或 isBusinessContact 为真。
重命名是一种一元运算,写成
要将关系中的 “isFriend” 属性重命名为 “isBusinessContact”,可以使用
$\rho_{\text{isBusinessContact / isFriend} } ( \text{addressBook} )$ 。 还有$\rho_{x(A_{1},\ldots ,A_{ n})}(R)$ 表示法,其中 R 重命名为 x 并且属性${a_{1},\ldots ,a_{n}}$重命名为${A_{1},\ldots ,A_{n}}$ 。
自然连接是写为 (R ⋈ S)的二元运算,这里的 R 和 S 是关系。自然连接的结果是在 R 和 S 中的在它们的公共属性名字上相等的所有元组的组合。例如下面是表格 “Employee” 和 “Dept” 和它们的自然连接: