现在的位置: 首页 > 综合 > 正文

数据库关系代数表达式学习

2018年08月01日 ⁄ 综合 ⁄ 共 3274字 ⁄ 字号 评论关闭

 关系代数是关系数据库系统查询语言的理论基础



 






一、关系代数的9种操作:



 

    关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。




 


五个基本操作:


    并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π)


 


四个组合操作:


    交(∩)、联接(等值联接)、自然联接(RCROSS.gif
S)、除法(÷)




注2:等值连接表示先做笛卡尔积(×)之后,对相应列进行选择或等值关联后的结果(仅筛选行、不筛选列)



注2:自然连接表示两个关系中若有相同名称的属性,则自动作为关联条件,且仅列出一列

 


 

二、关系代数表达式:


 


   
由关系代数运算经有限次复合而成的式子称为关系代数表达式。这种表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的查询和更新操作。



 


 

三、举例说明:


 


   
设教学数据库中有3个关系:







   
学生关系S(SNO,
SNAME,AGE,SEX)
   
学习关系SC(SNO,CNO,GRADE)
   
课程关系C(CNO,CNAME,TEACHER)




 


 
(1) 检索学习课程号为C2的学生学号与成绩



------------------------------------



SELECT SNO,GRADE

  FROM SC

 WHERE CNO='C2'



------------------------------------





π
SNO,
GRADE

(σ
CNO='C2'
(SC))



************************************


 


 
(2) 检索学习课程号为C2的学生学号与姓名



------------------------------------



SELECT SC.SNO,S.SNAME

  FROM SC,S

 WHERE SC.SNO=S.SNO

   AND SC.CNO='C2'

------------------------------------


π
SNO,SNAME
(σ
CNO='C2'
(SCROSS.gif
SC))



此查询涉及S和SC,先进行自然连接,然后再执行选择投影操作。


----


π
SNO,SNAME
(S)CROSS.gif
π
SNO
(σ
CNO='C2'
(SC)))


自然连接的右分量为"学了C2课的学生学号的集合"。

此表达式比前一个表达式优化,执行起来要省时间、省空间。

************************************


 


 

(3) 检索选修课程名为MATHS的学生学号与姓名




------------------------------------




SELECT SC.SNO,S.SNAME

  FROM SC,S,C

 WHERE SC.SNO=S.SNO

   AND SC.CNO=C.CNO

   AND C.CNAME='MATHS'



------------------------------------



π
SNO,
SANME

(σ
CNAME='MATHS'
(SCROSS.gif
SCCROSS.gif
C))

************************************


 


 
(4) 检索选修课程号为C2或C4的学生学号




------------------------------------




SELECT SNO

  FROM SC

 WHERE CNO='C2'

    OR CNO='C4'




------------------------------------




π
SNO
(σ
CNO='C2'∨CNO='C4'
(SC))

************************************


 


 
(5) 检索至少选修课程号为C2或C4的学生学号




------------------------------------




SELECT SA.SNO

  FROM SC AS SA,SC AS SB

 WHERE SA.SNO=SB.SNO

   AND SA.CNO='C2'

   AND SB.CNO='C4'



------------------------------------








π
1
(σ
1=4∧2='C2'∧5='C4'
(SC×SC))


************************************


 


 
(6) 检索不学C2课的学生姓名与年龄





------------------------------------





SELECT SNAME,AGE

  FROM S

MINUS


SELECT S.SNAME,S.AGE

  FROM SC,S

 WHERE SC.SNO=S.SNO

   AND SC.CNO='C2'
(Oracle)





------------------------------------




π
SNAME,
AGE

(S)-π
SNAME,
AGE

(σ
CNO='C2'
(SCROSS.gif
SC))


************************************


 


 
(7) 检索学习全部课程的学生姓名





------------------------------------





这个定义用SQL表示比较麻烦,略过








------------------------------------








π
SNO,
CNO

(SC)÷π
CNO
(C)



先用除法取出选取所有课程的SNO集(除法可以理解为一个Filter)





π
SNAME
(S CROSS.gif
(π
SNO,CNO
(SC)÷π
CNO
(C)))




再关联S表取出SNAME



************************************


 


 
(8) 检索所学课程包含S3所学课程的学生学号






------------------------------------






这个定义用SQL表示比较麻烦,略过







------------------------------------






π
SNO,CNO
(SC)÷ π
CNO
(σ
SNO='S3'
(SC))

同样运用了除法的特性







************************************








 


 
(9) 将新课程元组(
'C10','PHYSICS','YU')
插入到关系C中






------------------------------------










INSERT INTO C VALUES('C10','PHYSICS','YU')









------------------------------------









(C
('C10','PHYSICS','YU'))










记住该符号的用法











************************************








 


 
(10) 将学号S4选修课程号为C4的成绩改为85分






------------------------------------










UPDATE SC SET GRADE=85









 WHERE SNO='S4'









   AND CNO='C4'















------------------------------------




















(SC
('S4','C4',?

)
('S4','C4',85))




















先用'
'实现DELETE功能,再用'∪'实现INSERT功能




















注意使用?来表示检索时忽略该字段值
















************************************








 


 


四、关系代数表达式的优化:

 




 


  目的

:为了系统在执行时既省时间又能提高效率。
 
  基本策略

:先做选择,运用投影去除多余属性等等。
 
  优化算法

:语法树(
尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值)





 

    例如:




 



   
π

SNO
,SNAME

(σ
GRADE>60
(SCROSS.gif
SC)) 进行
优化后转换为:




   
π

SNO
,SNAME

(π
SNO
,SNAME

(S)CROSS.gifπ
SNO

(σ
GRADE>60
(SC)))


    --即提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值






 


 

    又如:




 

    S(S#,SNAME,AGE,SEX)
    SC(S#,C#,GRADE)
    C(C#,CNAME,TEACHER)





 


   
π
CNAME,TEACHER
(σ
SEX='女'
(SCROSS.gif
SCCROSS.gif
C)) 进行
优化后转换为:
   
π
CNAME,
TEACHER

(CCROSS.gifπ
C#
(π
S#,C#
(SC)CROSS.gifπ
S#
(σ
SEX='女'
(S))))



 

    优化前和优化后的语法树如下所示:




 

    tree.JPG


 

抱歉!评论已关闭.