首页 百科知识 关系运算与表的操作

关系运算与表的操作

时间:2022-10-18 百科知识 版权反馈
【摘要】:而关系是n元有序组的集合,因此,可以将关系操作看成是集合的运算。对于关系内的属性指定可引入新的运算,称为投影运算。R′是这样一个关系,它是R中投影运算所指出的那些域的分量所组成的关系。对于两个关系的合并操作可以用笛卡尔乘积表示。关系R与S的笛卡尔乘积可写为:关系代数中上述五个运算是最基本的运算,但为操作方便,还需增添一些运算,特别是用于查询的运算,它们均可由基本运算导出。

3.2.2 关系运算与表的操作

前面已经介绍过,表的操作有四种,它可以分解成六种基本操作:

(1)表的属性指定。

(2)表元组选择。

(3)两个表的合并。

(4)表的查询。

(5)表中元组的插入。

(6)表中元组的删除。

分析这些基本操作后可以发现:这些操作的基本对象都是一个或两个关系,它们经操作后所得的结果仍是关系。因此可以将这些操作看成是对关系的运算,而且满足封闭性。而关系是n元有序组的集合,因此,可以将关系操作看成是集合的运算。

下面讨论这些基本操作是些什么运算。

(1)插入。设有关系R插入若干有序组,这些有序组组成关系R′,由传统集合论可知,可用集合并运算表示,即可写为:

img37

(2)删除。设有关系R删除一些有序组,这些有序组组成关系R′,由传统集合论可知,可用集合差运算表示,即可写为:

img38

(3)修改。修改关系R内的有序组内容可用下面方法实现:

设需修改的有序组构成关系R′,则先作删除,得:

img39

设需修改后的有序组构成关系R″,此时我们将其插入,从而得到结果:

img40

(4)查询。无法用传统的集合论方法去表示用于查询的三个操作,从而要引入一些新的运算。

①投影(projection)运算。对于关系内的属性指定可引入新的运算,称为投影运算。投影运算是一个一元运算,一个关系通过投影运算(并由该运算给出所指定的属性)后仍为一个关系R′。R′是这样一个关系,它是R中投影运算所指出的那些域的分量所组成的关系。设R 有n个域:A1,A2,…,An,则在R上对域Ai1,Ai2,…,Aim(Aij∈{A1,A2,…,An,})的投影可表示成为下面的一元运算:

img41

例3.5 对表3.1所示的关系S有:

sn,sa(S)={(王诚,21),(徐一飞,22),(李峰,20),(赵建平,18),(申桂花,21)}

sn(S)={(王诚),(徐一飞),(李峰),(赵建平),(申桂花)}

②选择(selection)运算。对关系内元组的选择可引入另一新的运算———选择运算。选择运算也是一个一元运算,关系R通过选择运算(并由该运算给出所选择的逻辑条件)后仍为一个关系。这个关系是由R中那些满足逻辑条件的有序组所组成。设关系的逻辑条件为F,则R满足F的选择运算可写成为:

σF(R)

逻辑条件F是一个逻辑表达式,它可以具有αθβ的形式,其中α,β是域变量或常量,但α,β又不能同为常量,θ是比较运算符,它可以是<,>,≤,≥,=或≠。αθβ叫基本逻辑条件;也可由若干个基本逻辑条件经逻辑运算∧(并且)和∨(或者)构成,称为复合逻辑条件。

例3.6 表3.1所示的关系S中找出年龄大于20岁的所有有序组,可以写成为:

σ(sa>20)(S)={(13761,王诚,MA,21),(13762,徐一飞,CS,22),(13765,申桂花,MA,21)}

例3.7 在表S中找出年龄大于20岁且在数学系(MA)学习的学生,可以写成为:

σ(sa>20sd=MA)(S)={(13761,王诚,MA,21),(13765,申桂花,MA,21)}

有了上述两个运算后,对一个关系内的任意行、列的数据都可以方便地找到,下面举例如下:

例3.8 在表S中查出所有年龄大于20岁的学生姓名,它可以表示如下:

sn,σsa>20(S)={(王诚),(徐一飞),(申桂花)}

③笛卡尔乘积(cartesian product)运算。对于两个关系的合并操作可以用笛卡尔乘积表示。设有关系R,S,它们分别为n,m元关系,并分别有p,q个有序组。此时,关系R与S经笛卡尔乘积所得的关系T是一个n+m元关系,它的有序组个数是p×q,T的有序组是由R与S的有序组组合而成。关系R与S的笛卡尔乘积可写为:

R×S

设有如表3.2所示的两个关系R,S,则R与S的笛卡尔乘积T=R×S可用表3.3表示。

表3.2 关系R,S

img42

表3.3 T=R×S

img43

关系代数中上述五个运算是最基本的运算,但为操作方便,还需增添一些运算,特别是用于查询的运算,它们均可由基本运算导出。常用的有联接及自然联接等两种查询运算,现分别介绍如下:

④联接(join)运算

用笛卡尔乘积可以建立两个关系间的联接,但此种方法并不是一种好的方法,因为这样所建立的关系是一个较为庞大的关系,而且也并不符合实际操作的需要。在实际应用中一般两个相互联接的关系往往须满足一些条件,所得到的结果也较为简单。因此,对笛卡尔乘积作适当的限制,以适应实际应用的需要。这样就引入了联接运算与自然联接运算。

联接运算又可称为θ-联接运算,这是一种二元运算,通过它可以将两个关系合并成一个关系。设有关系R,S以及比较式iθj,其中i为R中域,j为S中域,θ为比较符。此时可以将R,S在域i,j上的θ-联接记为:

img44

它的含义可用下式定义:

img45

亦即是说,R与S的θ-联接是R与S的笛卡尔乘积再加上限制iθj而成。显然,img46的有序组数远远少于R×S的有序组数。

所要注意的是,在θ-联接中,i与j需具有相同域,否则无法做比较。

θ-联接中如θ为“=”,此时称为等值联接,否则称为不等值联接。如θ为“<”时称为小于联接,如θ为“>”时称为大于联接。

例3.9 设有关系R和S分别如表3.4(a)、(b)所示,则img47为表3.4(c)所示的关系,而img48为如表3.4(d)所示的关系

表3.4 R与S的θ-联接实例

img49

⑤自然联接(natural join)运算

在实际应用中最为常用的联接是θ-联接的一个特例叫自然联接,这主要是因为常用的两关系间联接大都满足条件:

●两关系间有公共域

●通过公共域的相等值进行联接

根据这两个条件我们建立自然联接运算。

设有关系R、S,R有域A1,A2,…,An,S有域B1,B2,…,Bm,它们间Ai1,Ai2,…,Aij与B1,B2,…,Bj,分别为相同域,此时它们自然联接可记为:

img50

自然联接的含义可用下公式表示:

img51

在此公式中可以看出,自然联接是一种等值联接,其结果关系T的域是由R与S的域所组成,但公共域只出现一次。

例3.10 设关系R和S如表3.5(a),(b)所示,此时img52则为如表3.5(c)所示。

表3.5 R与S的自然联接实例

img53

至此,引入了五种基本运算与两种扩充运算,一共七种。在这七种最常用的是五种,它们是投影运算、选择运算、自然联接运算、并运算、差运算。一般讲有这五种运算就够了。

到此为止,已经知道关系是一个n元有序组的集合,而关系操作则是集合上的一些运算,其中常用的是五种,它们是:

(1)投影:一元运算,可用∏A1A2,…Am(R)表示。

(2)选择:一元运算,可用σF(R)表示。

(3)自然联接:二元运算,可用img54表示

(4)并:二元运算,可用R∪S表示。

(5)差:二元运算,可用R-S表示。

这样在关系所组成的集合A上的二个一元运算及三个二元运算,它们满足封闭性条件,其所构成的系统:

(A,∏,σ,img55,∪,-)

它是个代数系统称之为关系代数。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈