精华内容
下载资源
问答
  • 数据库关系代数表达式学习

    千次阅读 多人点赞 2015-11-01 21:55:33
    数据库关系代数表达式

    原文链接  http://www.blogjava.net/decode360/archive/2009/04/15/292362.html

    注:修改了原链接中的少数错误


    关系代数是关系数据库系统查询语言的理论基础。很有必要学习一下,有些是用代数表达式很方便的东西,用SQL写出来还是挺麻烦的,并不是想象当中那么直接。
     
    一、关系代数的9种操作:
     
        关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。
     
    五个基本操作:
        并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π)
     
    四个组合操作:
        交(∩)、联接(等值联接)、自然联接(RcrossS)、除法(÷) 
    注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'(ScrossSC))
    此查询涉及S和SC,先进行自然连接,然后再执行选择投影操作。
    ----
    π SNO,SNAME(S)crossπ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'(ScrossSCcrossC))
    ************************************
     
     
    (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'(ScrossSC))
    ************************************
     
     
    (7) 检索学习全部课程的学生姓名
    ------------------------------------
    这个定义用SQL表示比较麻烦,略过
    ------------------------------------
    π SNO,CNO(SC)÷πCNO(C)
    先用除法取出选取所有课程的SNO集(除法可以理解为一个Filter)
    π SNAME(S cross (π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(ScrossSC)) 进行优化后转换为:
        π SNO,SNAME(πSNO,SNAME(S)crossπSNO(σGRADE>60(SC)))
        --即提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值
     
     
        又如:
     
        S(S#,SNAME,AGE,SEX)
        SC(S#,C#,GRADE)
        C(C#,CNAME,TEACHER)
     
        π CNAME,TEACHER(σSEX='女'(ScrossSCcrossC)) 进行优化后转换为:
        πCNAME,TEACHER(CcrossπC#(πS#,C#(SC)crossπS#(σSEX='女'(S))))
     
        优化前和优化后的语法树如下所示:


    展开全文
  • 数据库关系代数表达式

    千次阅读 2017-08-23 15:59:47
    一、关系代数的9种操作: 关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。 五个基本操作: 并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π) 四个组合操作: 交(∩)、...
    一、关系代数的9种操作:

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

    五个基本操作:
    并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π)

    四个组合操作:
    交(∩)、联接(等值联接)、自然联接(RcrossS)、除法(÷)
    注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'(ScrossSC))
    此查询涉及S和SC,先进行自然连接,然后再执行选择投影操作。
    ----
    π SNO,SNAME(S)cross(π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'(ScrossSCcrossC))
    ************************************


    (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'(ScrossSC))
    ************************************


    (7) 检索学习全部课程的学生姓名
    ------------------------------------
    这个定义用SQL表示比较麻烦,略过
    ------------------------------------
    π SNO,CNO(SC)÷πCNO(C)
    先用除法取出选取所有课程的SNO集(除法可以理解为一个Filter)
    π SNAME(S cross (π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(ScrossSC)) 进行优化后转换为:
    π SNO,SNAME(πSNO,SNAME(S)crossπSNO(σGRADE>60(SC)))
    --即提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值


    又如:

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

    π CNAME,TEACHER(σSEX='女'(ScrossSCcrossC)) 进行优化后转换为:
    πCNAME,TEACHER(CcrossπC#(πS#,C#(SC)crossπS#(σSEX='女'(S))))
    展开全文
  • 转载于:https://www.cnblogs.com/jj81/p/8910561.html

     

     

    转载于:https://www.cnblogs.com/jj81/p/8910561.html

    展开全文
  • 关系代数表达式总结-数据库关系代数表达式总结-数据库关系代数表达式总结-数据库
  • 数据库代数表达式

    千次阅读 2018-07-29 22:47:43
    数据库代数表达式 基础知识介绍 关系模型简述:形象的说,一个关系(relation)就是一张表(table),关系模型就是处理table的,它由三个部分组成: 描述DB各种数据的基本结构形式(table/relation) 描述...

    数据库之代数表达式

    基础知识介绍

    关系模型简述:形象的说,一个关系(relation)就是一张表(table),关系模型就是处理table的,它由三个部分组成:

    描述DB各种数据的基本结构形式(table/relation)
    描述table与table之间所可能发生的的各种操作(关系运算)
    描述这些操作所应遵循的约束条件(完整性约束)

    关系模型三要素

    基本结构:relation/table
    基本操作:relation operator
            基本的:并(union)、差(difference)、广义积(product)、选择(selection)、投影(projection)
            拓展的:交(intersection)、连接(join)、除(division)
    完整性约束:实体完整性、参照完整性、用户自定义完整性

    表的严格定义:首先定义“列”的取值范围“域(domain)”域(domain)

    一组值的集合,这组值具有相同的数据类型
    如整数的集合、字符串的集合、全体学生的集合
    集合中元素的个数称为域的基数(cardinality)

    再定义元组及所有可能组合成的元组:笛卡尔积(Cartesion Product)关系(relation)一组域D1、D2、D3……Dn的笛卡尔积的子集笛卡尔积中具有某一方面意义的那些元组被称为一个关系(Relation)由于关系的不同列可能来自同一域,为区分,需要为每一列起一个名字,该名字即为属性名

    关系的特性:列是同质:即每一列中的分量来自同一域,是同一类型的数据列位置互换性:区分那一列是靠列名行位置互换性:区分哪一行是靠某一或某几列的值(关键字/键字/码字)关系是以内容(名字或值)来区分的,而不是属性在关系的位置来区分

    属性不可再分特性:又被称为关系第一范式

    候选码(Candidate key)/候选键关系中一个属性组,其值能唯一标识一个元组,若将该属性组中去掉任何一个属性,它就不具备这一性质了,这些的属性组称为候选码

    主码(primary key)/主键当有多个候选码时,可以选一个作为主码DBMS以主码为主要线索管理关系中的各个元组

    外键(foreign key)关系R中的一个属性组,它不是R的候选键,但它与另一个关系s的候选键相对应,则称这个属性组为R的外码或外键两个关系通常是靠外键连接起来的

    实体完整性关系的主键中的属性值不能为空值参照完整性如果关系R1的外码FK与关系R2的主键PK相对应,则R1中的每一个元组的FK值或者等于R2中某个元组的PK值或者为空值用户自定义完整性用户针对具体的应用环境定义的完整性约束条件

    关系代数

    关系代数基本操作:并、差、积、选择、投影、(更名)关系代数扩展操作:交、θ连接、自然连接关系代数复杂扩展操作:除、外连接

    关系代数的约束某些关系代数操作,如并、差、交等需满足“并相容性”:参与运算的两个关系及其相关属性之间有一点的对应性,可比性或意义关联性定义:关系R与关系S存在相容性,当且仅当:(1)关系R和关系S的属性数目必须相同(2)对于任意i,关系R的第i个属性的域必须和关系S的第i个属性的域相同

    选择(select)定义:给定一个关系R。同时给定一个选择的条件condition。选择运算结果也是一个关系。它从关系R中选择出满足给定条件的元组构成。

    差操作,在R中去除S中包含的元组

    投影(project)定义:给定一个关系R,投影运算结果也是一个关系,记作πa(R),它从关系R中选出属性含在a中的列构成投影操作从给定关系中选出某些列组成新的关系,而选择操作是从给定关系中选出某些行组成新的关系

    关系代数的基本书写思路了1、选出将要用到的关系/表2、做“积”运算3、做选择运算保留所需的行/元组4、做投影运算保留所需的列/属性

    关系代数的扩展操作(能有基本操作组合成):交、连接、等值连接、自然连接如交运算可以通过差运算来实现:R∩S = R - (R-S) = S - (S-R)不能展开

    θ连接定义:给定关系R和关系S,关系R与S的θ连接运算结果也是一个关系,它由关系R和关系S的笛卡尔积中,选取属性A与S中属性B之间满足θ条件的元组构成。

    等值连接(Equi-Join)定义:给定关系R和关系S,R与S的等值连接运算结果也是一个关系,它由关系R和关系S的笛卡尔积中选取R中属性A与S中属性B上值相等的元组所构成

    自然连接(Natural-join)定义:给定关系R和关系S,R与S的自然连接运算结果也是一个关系,它由关系R和关系S的笛卡尔积中选取相同属性组B上值相等的元组所构成

    书写关系代数表达式的基本思路检索是否涉及多个表,如不涉及,则可直接采用并、差、交、选择与投影,只要注意条件书写正确与否即可如涉及多个表,则检查能否使用自然连接,将多个表连接起来(多数情况是这样的)如不能,能否使用等值连接或不等值连接(θ-连接)还不能,则使用广义笛卡尔积,注意相关条件的书写连接完后,可以继续使用条件,投影等运算,即所谓数据库的“选投联”操作

    关系代数复杂扩展(1)“除”操作除法运算经常用于求解“查询……全部的/所有的……”问题

    外连接(Outer-Join)定义:两个关系R与S进行连接时,如果关系R(或S)中的元组在S(或R)中找不到相匹配的元组,则为了避免该元组信息丢失,从而将该元组与S(或R)中假定存在的全为空值的元组形成连接,放置在结果关系宗,这种连接称为外连接(Outer Join)

    还有左外连接、右外连接、全外连接

    展开全文
  • 关系数据库 一单项选择题 试题1 关系模型中,一个码() 以上都不是 可以由多个任意属性组成 由一个或多个属性组成,其值能够唯一标识关系中一个元组 至多由一个属性组成 [参考答案] 由一个或多个属性组成,其...
  • 数据库基础数据库介绍数据模型概念模型逻辑模型关系数据库 写下博客用于自我复习、自我总结。 如有错误之处,请各位指出。 本数据库系列专栏,文章的重心将会是总结SQL语句的使用,而不会涉及到太多数据库本身或...
  • 简述关系代数中并、交、差、选择、投影、连接、除及关系代数表达式
  • (1)试写出该查询的关系代数表达式;(2)试写出查询优化的关系代数表达式。 (1)πCNAME,TEACHER(σSEX=女(SSCC)) (2)优化为:πCNAME,TEACHER(CπC#(πS#,C#(SC)πS#(σSEX=女(S)))) (基本思路:尽量提前做选择操作;...
  • 关系数据库关系数据结构及形式化定义关系模型是建立在集合代数的基础上的域:一组具有相同数据类型的值的集合笛卡尔积:是在域上的一种运算关系:关系是笛卡尔积的有限子集,是一张二维表,每行对应元组,每列对应...
  • 这是数据库的一个课程设计,用vs2008编写,具体使用方法在debug文件夹中.
  • 扩展资料: 设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成。其结果关系仍为n目关系。记作: R-S={t|t∈R∧t∉S} 设关系R和关系S具有相同的目n,且...
  • 之前学习了一下关系代数表达式,现在再学习一下元组关系的演算,这样就全了。这篇东西的符号打出来费了好多时间,比较麻烦,还好看着还能看懂,关键是全文本的,好下面开始正文。 为了讨论方便,先允许关系的基数是...
  • (p484)设学生课程数据库中有学生S、课程C和学生选课SC这3个关系,如图9-20所示,请用关系代数表达式表达以下检索问题。 S C SC   (p498)检索至少选修了课程号“1”和“2”的学生的学号 在mysql中...
  • 各位学员大家好,大家在学习数据库关系代数运算时,感觉很多符号都不认识,具体的运算也有其先后顺序,为了让大家快速掌握这方面的知识点,接下来就带领大家一起来学习一下!例题:若有关系R(A,B,C,D,E)和S(B,C,F,G)...
  • 文章目录关系数据库关系代数关系代数的分类及其运算符传统的集合运算专门的关系运算 关系数据库 关系代数 关系模型与其它模型相比,最有特色的是它的数据库语言 这种语言灵活方便、表达能力和功能都很强 目前关系...
  • 参考:数据库关系代数表达式学习 注意点:对于普通的join:A join B则join之后的集合的属性(attribute)数量为A,B的列数(attribute)相加 natural join则合并所有的名称相同的列 {σ, π,×,∪,-}->{...
  • 数据库关系代数

    2015-10-15 11:45:48
    关系代数是关系数据库系统查询语言的理论基础。很有必要学习一下,有些是用代数表达式很方便的东西,用SQL写出来还是挺麻烦的,并不是想象当中那么直接。   一、关系代数的9种操作:    关系代数中包括了:...
  • 关系代数关系代数关系代数运算的基本操作为什么要提出关系代数关系代数运算的约束集合操作:并操作差操作笛卡尔积纯关系操作选择投影小结关系代数的扩展操作交操作θ连接等值连接自然连接小结关系代数表达式的书写...
  • 1、有两个关系S(A,B,C,D)和T(C,D,E,F),写出与下列查询等价的SQL表达式: (1)σA=10(S)\sigma_{A=10}(S)σA=10​(S) select * from S where A=10; (2)ΠA,B(S)\Pi_{A, B}(S)ΠA,B​(S) select A,B from S; ...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 256
精华内容 102
关键字:

数据库关系代数表达式