关系代数运算
关系代数的运算是一种数学运算,你主要功能是通过这种数学运行来指导数据库在关系操作上的程序实现。
如图所示,下面是关系代数的操作,上面是对应的SQL语句。如果我们熟悉关系代数的操作那么就很容易写出复杂的SQL语句了。
关系代数的操作
对关系进行运算时,我们可以采用对待集合的方式来操作,这些操作被称为集合操作。其他的一些操作不能在集合上使用,那么被成为纯关系操作。
对于集合操作中U,∩,-操作需要满足并相容性
并操作
举例
差运算
举例
笛卡儿积
笛卡儿积是将关系R中的每个元组与关系S中的每个元组进行拼接组成一个新的关系
下面是RxS的结果,R和S使用上图中的R,S
选择操作
选择操作就是从关系中选出符合条件的元组,选出某一些行来进行操作
举例
选择A2值为a或b的元祖
投影操作
投影操作是从关系R中选出某些列。
举例
将A1和A3进行投影,如果投影中有重复的元组则需要去掉
连接操作
连接操作是先对两个关系做笛卡儿积生成一个新的关系,然后在新的关系上做选择操作
Ɵ是比较运算符,如>,<,=等
举例
下图中先将R和S进行笛卡尔积运算,然后在选出B<=H的元组来。
下图中使用了自连接操作
自然连接
自然连接是一种特殊的等值链接,他要求关系R和关系S具有相同的属性组B(b1,b2,b3……),这些属性组的取值是相等的,在最后生成的关系中去掉属性重复的列。
举例
下图中属性相同的只有一项B
除操作
除操作比较复杂,它是一种全包含操作,通过下面的例子来解释除操作
在(1)中计算R除以S操作,首先生成的关系中没有R和S的公共属性A3。其次生成的关系中每个元组与S中的元组进行组合都能出现在R中。
在(3)中只有(a,e)的原因是只有(a,e)与S中的每个元组组合才能出现在R中,而像(d,b)这种元组如果如S中每个元组组合的话不能全部出现在R中。
在(2)中我们可以这样来理解除法运算,找出即出现c又出现f的元组,并且这些元组的其余属性值是相等的。如包含c和f的元组有【(a,b,c)】,【(d,b,c),(d,b,f)】【(a,e,c),(a,e,f)】,其余属性值相等的有(a,e),(d,b)。
外连接操作
提出问题
有三张表分别是Teacher(T#, Tname, Salary), Course(C#, Cname), Teach(T#, C#)
请列出所有老师的信息,包括姓名,工资,所教课程
下面是关系代数公式:
通过自然连接然后进行投影,我们可以选出需要的信息。但是我们发现遗漏了一个老师,这是因为在自然连接的时候只有相等的才能被选择出来,而在Teach表中没有编号为003的老师,也就是说编号为003的老师没有教授课程,所以在最终结果中我们遗漏了一个老师。
两个关系R和S进行连接时,如果关系R中的元组在S中没有找到相匹配的元组,或者关系S中元组在R中没有找到相匹配的。为了避免元组信息的丢失,假定R或S中存在一个值全为空的元组,然后将未匹配的元组与全为空的元组连接起来。
如同所示R中的第二行和第三行记录在S中未找到匹配的,那么就与空元组进行连接,S中的元组亦然。所以最后的外连接结果如上图所示。
- 左外连接,保证左边表中的元组不丢失
- 右外连接,保证右边表中的元组不丢失
- 全外连接,保证两个表中的元组都不丢失
下面是左外连接和右外连接,全外链接如上图所示