|
|
|
关系代数是一种传统的表达方式,用对关系的运算来表达查询。关系代数的运算对象是关系,运算结果也是关系。关系代数的运算符有集合运算符、专门的关系运算符、算术比较符和逻辑运算符。集合运算符包括∪(并)、-(差)、∩(交);专门的关系运算符包括×(广义笛卡尔积)、σ(选择)、∏(投影)、?(连接)、÷(除);比较运算符包括>(大于)、≥(大于等于)、<(小于)、≤(小于等于)、=(等于)、≠(不等于);逻辑运算符包括?(非)、∧(与)、∨(或)。按运算符的不同可将关系代数的运算分为传统的集合运算和专门的关系运算。
|
|
|
|
|
|
(1)设定一个关系模式R(A1,A2,…,An),它的一个关系为R。t∈R表示t是R的一个元组,t[Ai]表示元组t中相应于属性Ai的一个分量。
|
|
|
(2)设定A={A?1, A?2,…,Aik},其中Ai1, Ai2,…,Aik是A1,A2,…,An中的一部分,则A称为属性列或域列。t[A]=(t[Ai1], t[Ai2],…,t[Aik])表示元组t在属性列A上各个分量的集合。 表示在{A1,A2,…,An}中去掉{Ai1,Ai2,…,Aik}后剩余的属性组。
|
|
|
(3)设R为n目关系,S为m目关系,tr∈R, ts∈S, 称作元组的连接,它是n+m列元组,其中前n个分量是R中的一个n元组,后m个分量是S中的一个m元组。
|
|
|
|
(4)设定一个关系R (X, Z),X和Z是属性组,当t[X]=x时,x在R中的象集为Zx={t[Z]|t∈R,t[X]=x},它表示R中属性组X上值为x的诸元组在Z上分量的集合。
|
|
|
|
|
|
传统的集合运算将关系看成元组的集合,运算从关系的水平方向(行)来进行,包括并、差、交、广义笛卡尔积四种运算。
|
|
|
设关系R和关系S都是n目关系并且相应属性取自同一个域。则关系R与关系S的并记作R∪S={t|t∈R∨t∈S},结果由属于R或者属于S的元组组成;关系R与关系S的差记作R-S={t|t∈R∧t S},结果由属于R而不属于S的所有元组组成;关系R与关系S的交记作R∩S={t|t∈R∧t∈S},结果由既属于R又属于S的元组组成。并、交、差的结果都是n目关系。
|
|
|
|
|
|
专门的关系运算不仅涉及行而且涉及列,包括选择、投影、连接、除等。
|
|
|
|
设一个学生-课程数据库,包括学生关系、课程关系和选修关系,如下图所示,下面的例题都基于这三个关系。
|
|
|
|
|
|
|
|
|
|
选择是在关系R中选择满足给定条件的诸元组,记作σF(R)={t|t∈R∧F(t)}=′真′},其中F表示选择条件的逻辑表达式(F由逻辑运算符?、∧、∨连接各算术表达式组成,算术表达式的基本形式为X1θY1,其中θ表示比较运算符,X1、Y1是属性名或常量,或简单函数,属性名也可以用它的序号来代替),取值“真”或“假”。选择运算其实是从关系R中选取一些元组,这些元组可以使逻辑表达式F取值为真。选择运算是从行的角度进行的。
|
|
|
|
|
|
σSdept='CS'(Student)或σ5='CS'(Student)
|
|
|
|
|
|
|
|
关系R上的投影是指从关系R中选取若干属性列并组成一个新的关系,记作πA(R)={t[A]|t∈R}。投影运算是从列的角度进行的。
|
|
|
|
|
|
πSno,Sname(Student)或π2,5(Student)
|
|
|
|
注意:由于投影之后取消了原关系中的某些列,所以可能会出现重复的行,应取消这些相同的行。所以投影之后不但取消原关系中的某些列,还取消了某些元组。
|
|
|
|
|
连接是从两个关系的笛卡尔积中选取属性间满足一定条件的元组,记作 ,其中A和B分别是R和S上的属性组,θ是比较运算符。连接运算从R和S的广义笛卡尔积R×S中选取一些元组,这些元组在A属性组上的值与在B属性组上的值满足比较关系θ。连接操作是从行的角度进行的运算。
|
|
|
当θ为“=”时的连接运算称为等值连接,等值连接是比较重要和常用的一种连接运算。另外一种重要并且常用的连接运算是自然连接。自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,即当R和S具有相同的属性组A,自然连接可记作: 。由于在自然连接中还要把重复的列去掉,所以是同时从行和列的角度进行运算。
|
|
|
例3:设有两个关系R和S,如下图(a)和(b), 的结果如下图(c),等值连接 的结果如下图(d),自然连接R?S的结果如下图(e)。
|
|
|
|
|
|
|