数据库 第6章 形式化关系查询语言

第六章 形式化关系查询语言

6.1 关系代数

关系代数是一种过程化查询语言。它包括一个运算的集合,这些运算以一个或两个关系为输入,产生一个新的关系作为结果。关系代数基本运算有:选择、投影、并、集合差、笛卡尔积和更名。在基本运算外,还有一些其他运算,即集合交、自然连接和赋值。

6.1.1 基本运算
  • 选择运算。选择运算选出满足给定谓词的元组。用 σ \sigma σ表示选择,谓词写作 σ \sigma σ的下标。例如:

    选择关系instructor中属于“Physics”的元组
    σ d e p t _ n a m e = " P h y s i c s " ( i n s t r c u t o r ) \sigma_{dept\_name="Physics"}(instrcutor) σdept_name="Physics"(instrcutor)
    通常,谓词可以进行比较,使用的是 = , ≠ , < , > , ≤ , ≥ =,\ne,<,>,\le,\ge =,=,<,>,,,也可以通过 ∧ , ∨ , ¬ \wedge,\vee,\neg ,,¬。例如:

    选择物理系中工资大于90000的教师
    σ d e p t _ n a m e = " P h y s i c s "   ∨   s a l a r y   >   90000 ( i n s t r u c t o r ) \sigma_{dept\_name="Physics"\ \vee\ salary\ >\ 90000}(instructor) σdept_name="Physics"  salary > 90000(instructor)
    选择谓词中也可以包括两个属性之间的比较,例如:

    选择系名与楼名相同的系
    σ d e p t _ n a m e = b u i l d i n g ( d e p a r t m e n t ) \sigma_{dept\_name=building}(department) σdept_name=building(department)

  • 投影运算。投影运算用 Π \Pi Π表示。投影可以从关系中选出特定的属性来形成新的关系,由于新的关系也是一个集合,所有重复行均被去除。例如我们想要列出所有教师的ID,name,salary,而不关心dept_name,可以如下给出
    Π I D , n a m e , s a l a r y ( i n s t r u c t o r ) \Pi_{ID,name,salary}(instructor) ΠID,name,salary(instructor)

  • 并运算。并运算用 ∪ \cup 表示。只有相容的集合才可以做并运算,即两个关系属性的数目且对应属性的域集是相同的。例如,找出开设在2009年秋季学期或者2010春季学期的course_id
    Π c o u r s e _ i d ( σ y e a r = 2009   ∧   s e m a s t e r = " F a l l " ( s e c t i o n ) )   ∪ Π c o u r s e _ i d ( σ y e a r = 2010   ∧   s e m a s t e r = " S p r i n g " ( s e c t i o n ) ) \Pi_{course\_id}(\sigma_{year=2009\ \wedge\ semaster="Fall"}(section))\ \cup\\ \Pi_{course\_id}(\sigma_{year=2010\ \wedge\ semaster="Spring"}(section)) Πcourse_id(σyear=2009  semaster="Fall"(section)) Πcourse_id(σyear=2010  semaster="Spring"(section))

  • 差运算。差运算使用 − - 表示。差运算给出在一个关系中而不在另一个关系中的元组。和并运算一样,差运算也需要在相容的关系中进行。例如,找出开设在2009年秋季学期而不开设在2010春季学期的course_id
    Π c o u r s e _ i d ( σ y e a r = 2009   ∧   s e m a s t e r = " F a l l " ( s e c t i o n ) )   − Π c o u r s e _ i d ( σ y e a r = 2010   ∧   s e m a s t e r = " S p r i n g " ( s e c t i o n ) ) \Pi_{course\_id}(\sigma_{year=2009\ \wedge\ semaster="Fall"}(section))\ -\\ \Pi_{course\_id}(\sigma_{year=2010\ \wedge\ semaster="Spring"}(section)) Πcourse_id(σyear=2009  semaster="Fall"(section)) Πcourse_id(σyear=2010  semaster="Spring"(section))

  • 笛卡尔积运算。笛卡尔积运算使用x表示。笛卡尔积运算使得我们可以将任意两个关系的信息组合在一起,而不论属性名是否重复。例如, r = i n s t r u c t o r  x  t e a c h e s r=instructor\ \text{x}\ teaches r=instructor x teaches的关系模式为
    ( i n s t r c t o r . I D , i n s t r c t o r . n a m e , i n s t r c t o r . d e p t _ n a m e , i n s t r c t o r . s a l a r y , t e a c h e r s . I D , t e a c h e r s . c o u r s e _ i d , t e a c h e r s . s e c _ i d , t e a c h e r s . s e m e s t e r , t e a c h e r s . y e a r ) (instrctor.ID,instrctor.name,instrctor.dept\_name,instrctor.salary,\\ teachers.ID,teachers.course\_id,teachers.sec\_id,teachers.semester,teachers.year) (instrctor.ID,instrctor.name,instrctor.dept_name,instrctor.salary,teachers.ID,teachers.course_id,teachers.sec_id,teachers.semester,teachers.year)
    对于两个关系中不相同的属性,往往省略关系名前缀而不会产生任何歧义。

  • 更名运算。更名运算使用 ρ \rho ρ表示。使用更名运算可以为原有关系或经关系运算产生的结果附上名字,以便后续进行关系运算的表示。例如将关系 E E E更名为 x x x
    ρ x ( E ) \rho_x(E) ρx(E)
    也可以将 E E E中的属性更名
    ρ x ( A 1 , A 2 , … , A n ) ( E ) \rho_{x(A_1,A_2,\dots,A_n)}(E) ρx(A1,A2,,An)(E)

6.1.3 附加的关系代数基本运算

6个基本关系代数运算足以表达任何关系代数查询。但是,在某些情况下,仅使用基本关系代数运算会使表达式变得冗长。因此,我们定义一些附加的运算,虽然不能增强关系代数的表达能力,但可以简化一些常用的查询。

  • 集合交运算。集合交使用 ∩ \cap 表示。例如,找出开设在2009年秋季学期和2010春季学期的course_id
    Π c o u r s e _ i d ( σ y e a r = 2009   ∧   s e m a s t e r = " F a l l " ( s e c t i o n ) )   ∩ Π c o u r s e _ i d ( σ y e a r = 2010   ∧   s e m a s t e r = " S p r i n g " ( s e c t i o n ) ) \Pi_{course\_id}(\sigma_{year=2009\ \wedge\ semaster="Fall"}(section))\ \cap\\ \Pi_{course\_id}(\sigma_{year=2010\ \wedge\ semaster="Spring"}(section)) Πcourse_id(σyear=2009  semaster="Fall"(section)) Πcourse_id(σyear=2010  semaster="Spring"(section))
    r   ∩   s r\ \cap\ s r  s 的等价表述是 r − ( r − s ) r-(r-s) r(rs)

  • 自然连接运算。自然连接运算使用 ⋈ \bowtie 表示。其找出两个关系中所有相同属性中对应取值也相同的元组。例如,找出计算机系的所有教师,以及他教授的课程的所有课程名称。
    Π n a m e , t i t l e ( σ d e p t _ n a m e = " C o m p . s c i " ( i n s t r u c t o r  x  t e a c h e s  x  c o u r s e ) ) \Pi_{name,title}(\sigma_{dept\_name="Comp.sci"}(instructor\ \text{x}\ teaches\ \text{x}\ course)) Πname,title(σdept_name="Comp.sci"(instructor x teaches x course))
    r   ⋈   s r\ \bowtie\ s r  s 的等价表述是 Π r ∪ s ( σ r . A 1 = s . A 1 , r . A 2 = s . A 2 , … , r . A n = s . A n ( r  x  s ) ) \Pi_{r\cup s}(\sigma_{r.A_1=s.A_1,r.A_2=s.A_2,\dots,r.A_n=s.A_n}(r\ \text{x}\ s)) Πrs(σr.A1=s.A1,r.A2=s.A2,,r.An=s.An(r x s)),其中 A i A_i Ai表示 r r r s s s的公有属性。

  • 赋值运算。赋值运算使用 ← \leftarrow 表示。赋值运算将关系代数表达式结果赋值给临时关系变量。例如
    t e m p ← R   ⋈   S temp\leftarrow R\ \bowtie\ S tempR  S

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值