关系查询语言

来源:互联网 发布:网络喝酒猜拳视频 编辑:程序博客网 时间:2024/05/01 23:12

关系查询语言和关系运算

关系数据库的数据操纵语言(DML)的语句分成查询语句和更新语句两大类。从计算机语言的角度看,后者是在前者基础上的工作,前者比后者更复杂。关于查询的理论称为“关系运算理论”。

关系查询语言根据其理论基础的不同分成三类:

(1)关系代数语言。

(2)关系演算语言。

(3)关系逻辑语言。 

关系代数:

关系代数中的操作可以分为两类:

传统的集合操作:并、差、交、笛卡儿积

扩充的关系操作:投影、选择、连接、除法

关系代数的五个基本操作

并、差、笛卡儿积、投影、选择

关系代数的四个扩充操作

交、连接、自然连接、除法

并(Union)

设关系R和S具有相同的关系模式,R和S的并是由属于R或属于S的元组构成的集合,记为R∪S。形式定义如下:

R∪S≡{t | t∈R ∨ t∈S},t是元组变量,R和S的元数相同。

差(Difference)

设关系R和S具有相同的关系模式,R和S的差是由属于R但不属于S的元组构成的集合,记为R-S。形式定义如下:

R-S≡{ t | t∈R ∧ tÏS},R和S的元数相同。

笛卡儿积(Cartesian Product)

设关系R和S的元数分别为r和s,定义R和S的笛卡儿积是一个(r+s)元的元组的集合,每个元组的前r个分量(属性值)来自R的一个元组,后s个分量来自S的一个元组,记为R×S。形式定义如下:

         R×S≡{t | t=<tr,ts>∧tr∈R∧ts∈S}

若R中有m个元组,S中有n个元组,则R×S有m×n个元组。

投影(Projection)

  这个操作是对一个关系进行垂直分割,消去某些列,并重新安排列的顺序。

  设关系R是k元关系,R在其分量Ai1,…,Aim(m≤k,i1,…,im为1到k间的整数)上的投影用πi1,…,im(R)表示,它是一个m元元组集合,形式定义如下:

          πi1,…,im(R)≡{t|t=<ti1,…,tim>∧<t1,…,tk>∈R}

例如,π3,1(R)表示关系R中取第1、3列,组成新的关系,新关系中第1列为R的第3列,新关系的第2列为R的第1列。如果R的每列标上属性名,那么操作符π的下标处也可以用属性名表示。例如,关系R(A,B,C),那么πC,A(R)与π3,1(R)是等价的。

选择(Selection)

选择操作是根据某些条件对关系做水平分割,即选取符合条件的元组。条件可用命题公式(即计算机语言中的条件表达式)F表示。F中有两种成分:

运算对象:常数,元组分量

运算符:算术比较运算符和逻辑运算符

关系R关于公式F的选择操作,用σF(R)表示,形式定义如下:

                 σF(R)={ t | t∈R ∧ F(t)= true }

σ为选择运算符,σF(R)表示从R中挑选满足公式F为真的元组所构成的关系。

例如,σ2>ˊ3ˊ(R)表示从R中挑选第2个分量值大于3的元组所构成的关系。书写时,为了与属性序号区别起见,常量用引号括起来,而属性序号或属性名不要用引号括起来。

例 图2.12有两个关系R和S,图2.13的(a)、(b)表示R∪S和R-S。(c)表示R×S,此处R和S的属性名相同,就应在属性名前注上相应的关系名,例如R.A、S.A等。图2.13的(d)表示πC,A(R),即π3,1(R)。(e)表示σB=ˊbˊ(R)。

 

 

 

交(intersection)

关系R和S的交是由属于R又属于S的元组构成的集合,记为R∩S,这里要求R和S定义在相同的关系模式上。形式定义如下:

             R∩S≡{t︱t∈R ∧ t∈S},R和S的元数相同。

由于R∩S = R-(R-S),或R∩S = S-(S-R),因此交操作不是一个独立的操作。

   在图2.12中,R∩S的结果是只有一个元组(d,a,f)。

连接(join)

连接有两种:θ连接和F连接(这里θ是算术比较符,F是公式)。

① θ连接 

R ⋈ S≡{t︱ t=<tr,ts> ∧ tr∈R ∧ ts∈S ∧triθtsj } 

等价于R ⋈ S≡ σiθ(r+j)(R×S)

② F连接 

F连接是从关系R和S的笛卡儿积中选取属性间满足某一公式F的元组, 这里F是形为F1∧F2∧…∧Fn的公式,每个FP是形为iθj的式子,而i和j分别为关系R和S的第i、第j个分量的序号。

 

自然连接(natural join)

 两个关系R和S的自然连接操作具体计算过程如下:

 ① 计算R×S ;

 ② 设R和S的公共属性是A1,…,Ak,挑选R×S中满足R.A1=S.A1,…,R.Ak=S.Ak的那些元组;

  ③去掉S.A1 ,…, S.Ak 这些列。

定义:

 R ⋈ S≡πi1,…,im (σR.A1=S.A1∧... ∧R.Ak=S.Ak(R×S)),其中i1,…,im为R和S的全部属性,但公共属性只出现一次。

除法(division)

  设关系R和S的元数分别为r和s(设r>s>0),那么R÷S是一个(r-s)元的元组的集合。(R÷S)是满足下列条件的最大关系:其中每个元组t与S中每个元组u组成的新元组<t,u>必在关系R中。 

定义如下:

R÷S≡π1,2,…,r-s(R)-π1,2,…,r-s((π1,2,…,r-s(R)×S)-R)

例2.6  图2.16是关系做除法的例子。关系R是学生选修课程的情况,关系S1、S2、S3分别表示课程情况,  而操作R÷S1、R÷S2、R÷S3分别表示至少选修S1、S2、S3中列出课程的学生名单。

 

关系代数的七个扩充操作:改名,广义投影,赋值,外连接(outer join),外部并(outer union),半连接(semi join),聚集操作。

外连接(outer join)

外连接:R和S做自然连接时,把原该舍弃的元组也保留在新关系中,同时在这些元组新增加的属性上填上空值(null)。记为R    S。

左外连接:R和S做自然连接时,只把R中原该舍弃的元组放到新关系中,同时在这些元组新增加的属性上填上空值(null)。记为R    S。

右外连接:R和S做自然连接时,只把S中原该舍弃的元组放到新关系中,同时在这些元组新增加的属性上填上空值(null)。记为R    S。

 

外部并(outer union)

定义:如果R和S的关系模式不同,构成的新关系的元组由属于R或属于S的元组组成(公共属性只取一次),同时元组在新增加的属性上填上空值。

 

半连接(semijoin)

定义:R和S的自然连接在关系R的属性集上的投影,即:R⋉S=πR(R⋈S)。

 

聚集操作

聚集操作是指输入一个值的集合,然后根据该值集合得到一个单一的值作为结果。常用的聚集函数包括求最大值max,最小值min,平均值avg,总和值sum和记数值count等。

1.求男同学的平均年龄。

           avgage(σsex=‘M’(S))

2.求年龄为18岁的人数。

          counts#(σage=‘18’(S))

0 0
原创粉丝点击