精华内容
下载资源
问答
  • 此文档有关关系数据库关系演算、关系代数有关基本理论以及基本代码。
  • 数据库 元组关系演算

    千次阅读 2019-02-17 21:47:37
    数据库 元组关系演算
                   

    元组关系演算


        之前学习了一下关系代数表达式,现在再学习一下元组关系的演算,这样就全了。这篇东西的符号打出来费了好多时间,比较麻烦,还好看着还能看懂,关键是全文本的,好下面开始正文。


        为了讨论方便,先允许关系的基数是无限的。然后再对这种情况下定义的演算作适当的修改,保证关系演算中的每一个公式表示的是有限关系。


        在元组关系演算系统中,称 {t|Φ(t)} 为元组演算表达式。其中 t 是元组变量, Φ(t) 为元组关系演算公式,简称公式。 
    它由原子公式和运算符组成。

     

         原子公式有三类:

     

        (1) R(t)

            R 是关系名, t 是元组变量。 R(t) 表示 t 是 R 中的元组。于是,关系 R 可表示为: {t|R(t)}

        (2) t[i] θ u[j]

            t 和 u 是元组变量, θ 是算术比较运算符。 t[i] θ u[j] 表示断言 “ 元组 t 的第 i 个分量与元组 u 的第 j 个分量满足比较关系 θ ” 。例如, t[2] < u[3] 表示元组 t 的第 2 个分量小于元组 u 的第 3 个分量。

        (3) t[i] θ c 或  c θ t[i] 
            这里 c 是常量,该公式表示 “t 的第 i 个分量与常量 C 满足比较关系 θ” 。例如: t[4]=3 表示元组 t 的第 4 个分量等于 3 。

     

         在关系演算中定义了 “ 自由元组变量 ” 和 “ 约束元组变量 ” 的概念。这些概念和谓词演算中的概念完全一样。若公式中的一个元组变量前有 “ 全称量词 ” 或 “ 存在量词 ” ,则称该变量为约束元组变量,否则称自由元组变量。

     

        公式可以递归定义如下:

     

        (l) 每个原子公式是公式。 
        (2) 如果 Φ 1 和 Φ 2 是公式,则 Φ 1 ∧ Φ 2 、 Φ 1 ∨ Φ 2 、 ﹁ Φ1 也是公式。分别表示: 
            ① 如果 Φ 1 和 Φ 2 同时为真。则 Φ 1 ∧ Φ 2 才为真,否则为假; 
            ② 如果 Φ 1 和 Φ 2 中一个或同时为真,则 Φ 1 ∨ Φ 2 为真,仅 Φ 1 和 Φ 2 同时为假时, Φ 1 ∨ Φ 2 才为假; 
            ③ 如果 Φ 1 真,则 ﹁ Φ 1 为假。 
        (3) 若 Φ 是公式,则 ∃ t(Φ) 也是公式。其中符号 ∃ 是存在量词符号, ∃ t(Φ) 表示: 
            若有一个 t 使 Φ 为真,则 ∃ t(Φ) 为真,否则 ∃ t(Φ) 为假。 
        (4) 若 Φ 是公式,则 ∀ t( Φ ) 也是公式。其中符号 ∀ 是全称量词符号, ∀ t( Φ ) 表示: 
            如果对所有 t ,都使 Φ 为真,则 ∀ t( Φ ) 必为真,否则 ∀ t( Φ ) 为假。 
        (5) 在元组演算公式中,各种运算符的优先次序为: 
            ① 算术比较运算符最高; 
            ② 量词次之,且 ∃ 的优先级高于 ∀ 的优先级; 
            ③ 逻辑运算符最低,且 ﹁ 的优先级高于 ∧ 的优先级, ∧ 的优先级高于 ∨ 的优先级; 
            ④ 加括号时,括号中运算符优先,同一括号内的运算符之优先级遵循 ①②③ 各项。 
        (6) 有限次地使用上述五条规则得到的公式是元组关系演算公式,其他公式不是元组关系演算公式。

     

        一个元组演算表达式 {t|Φ(t)} 表示了使 Φ(t) 为真的元组集合。 
        关系代数的运算均可以用关系演算表达式来表示 ( 反之亦然 ) 。下面用关系演算表达式来表示五种基本运算:

     

        (1) 并

            R ∪ S={t|R(t) ∨ S(t)}

        (2) 差

            R - S={t|R(t) ∧ ﹁ S(t)}

        (3) 笛卡尔积

            R×S={t (n+m) |( ∃ u (n) )( ∃ v (m) )(R(u) ∧ S(v) ∧ t[1]=u[1] ∧ ... ∧ t[n]=u[n] ∧ t[n+1]=v[1] ∧ ... ∧ t[n+m]=v[m])}

            注: t (n+m) 表示 t 有目数 (n+m)

        (4) 投影

            π t1,t2,...,tk (R)={t (k) |( ∃ u )(R(u) ∧ t[1]=u[i1] ∧ ...t[k]=u[ik] )}

        (5) 选择

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

            注: F 是公式。 F 用 t[i] 代替 运 算 对 象 i 得到的等价公式。

     

         例 1 查询信息系 (IS 系 ) 全体学生: 
            S IS ={Student(t) ∧ t[5]='IS'}  
         例 2 查询年龄小于 20 岁的学生。 
            S 20 ={Student(t) ∧ t[4]<20}

         例 3 查询学生的姓名和所在系。 
            S={t (2) |( ∃ u)(Student(u) ∧ t[1]=u[2] ∧ t[2]=u[5])}


        上面定义的关系演算允许出现无限关系。例如 {t| ﹁ R(t)} 表示所有不属于 R 的元组 ( 元组的目数等于 R 的目数 ) 。要求出这些可能的元组是做不到的,所以必须排除这类无意义的表达式。把不产生无限关系的表达式称为安全表达式,所采取的措施称为安全限制。安全限制通常是定义一个有限的符号集 dom(Φ) , dom(Φ) 一定包括出现在 Φ 以及中间结果和最后结果的关系中的所有符号 ( 实际上是各列中值的汇集 ) 。 dom(Φ) 不必是最小集。

     

         当满足下列条件时,元组演算表达式 {t|Φ(t)} 是安全的: 
        ( 1 )如果 t 使 Φ(t) 为真,则 t 的每个分量是 dom(Φ) 中的元素。 
        ( 2 )对于 Φ 中每一个形如 ( ∃ t)(W(u)) 的子表达式,若 u 使 W(u) 为真,则 u 的每个分量是 dom(Φ) 中的元素。 
        ( 3 )对于 Φ 中每一个形如 ( ∀ t)(W(u)) 的子表达式,若 u 使 W(u) 为假,则 u 的每个分量必属于 dom(Φ) 。换言之,若 u 某一分量不属于 dom(Φ) ,则 W(u) 为真。

     

         例 4 设有关系 R 如图 2.8(a) , S={t| ﹁ R(t)} ,若不进行安全限制,则可能是一个无限关系。所以定义

            dom(Φ)= π A (R) ∪ π B (R) ∪ π C (R)

                  ={{a1,a2},{b1,b2},{c1,c2}}


         则 S 是 dom(Φ) 中各域值中元素的笛卡儿积与 R 的差集。结果如图 2.8(b) 。注意,在做笛卡儿积时各个域中的元素不能搞混。

     

        元组.jpg

     

     

    附:其他类型举例:

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

     

    1 、下列等式中恒等的是:

     

    ① π A1,A2 ( σ F (E))≡ σ F ( π A1,A2 (E))

    ② σ F (E 1 × E 2 )≡ σ F (E 1 ) ×σ F (E 2 )

    ③ σ F (E 1 -E 2 )≡ σ F (E 1 )- σ F (E 2 )

    ④ π A1,A2,B1,B2 (ECROSS.gifE)≡ π A1,A2 (E) CROSS.gifπ B1,B2 (E)

     

    ① 当 F 包含 A1,A2 以外的限制 时 ,不恒等

    ② 当 F 包含大于 E1( 或 E2) 个数 的限制 时 ,不恒等

    ③ 恒等

    ④ 等式不可能成立,右 边没 有相同 属 性

     

    2 、以下元 组 的意 义 :

     

    {t|( ∃ u)((R(u) ∨ S(u)) ∧ ( ∀ v)(T(v)→( ∃ w)((R(w) ∨ S(w)) ∧ w[1]=u[1] ∧ w[2]=v[1] ∧ w[3]=v[2])) ∧ t[1]=u[1]}

     

    据 说 是表示 R ∪ S ÷ T 的意思,但是我 实 在是看不 懂 。

     

    3 、以下元 组 表 达 式 转换为关 系代 数 表 达 式

     

    {t| ∃ u ∃ v(R(u) ∧ S(v) ∧ u[3]=v[1] ∧ u[4]=v[2] ∧ u[1]>v[3] ∧ t[1]=u[2])}

    其中 R(A,B,C,D) S(C,D,E)

     

    关 系代 数 表 达 式 为 : π B ( σ A>E (RCROSS.gifS))

     

    4 、把下列 关 系代 数 表 达 式 转换为 元 组 表 达 式

     

    π 1,4 (RCROSS.gifS)

    其中 R(A,B,C) S(B,D)

     

    元 组 演算表 达 式 为 : {t| ∃ u ∃ v(R(u) ∧ S(v) ∧ u[2]=v[1] ∧ t[1]=u[1] ∧ t[2]=v[2])}

     

    5 、 关 系代 数 表 达 式 → 元 组 演算表 达 式

     

    π 1,5,6 ( σ 1>5 (R×S)) -- 注意中 间 是乘法不是自然 连 接

    其中 R(A,B,C) S(A,B,C)

     

    {t| ∃ u ∃ v(R(u) ∧ S(v) ∧ u[1]>v[2] ∧ t[1]=u[1] ∧ t[2]=v[2] ∧ t[3]=v[3])}

     

    6 、下列 查询 效率最高的一 组 是:

     

    ① E1= π A,D ( σ B<'2007' ∧ R.C=S.C ∧ E='80' (R × S))

    ② E2= π A,D ( σ R.C=S.C ( σ B<'2007' (R) ×σ E='80' (S)))

    ③ E3= π A,D ( σ B<'2007' (R) CROSS.gifσ E='80' (S))

    ④ E4= π A,D ( σ B<'2007' ∧ E='80' (RCROSS.gifS))

     

    答案是 ③ ,很明 显 自然 连 接要 优 于笛卡尔 积 ,先 运 算再投影 优 于 先投影再 计 算


               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 数据库 - 关系演算

    千次阅读 2015-05-05 09:30:58
    关系演算以数理逻辑中的谓词演算为基础 按谓词变元不同 进行分类 1.元组关系演算: 以元组变量作为谓词变元的基本对象 元组关系演算语言ALPHA 2.域关系演算: 以域变量作为谓词变元的基本对象 域关系演算...

    关系演算

    以数理逻辑中的谓词演算为基础
    按谓词变元不同 进行分类
    1.元组关系演算:
    以元组变量作为谓词变元的基本对象
    元组关系演算语言ALPHA
    2.域关系演算:
    以域变量作为谓词变元的基本对象
    域关系演算语言QBE

    由E.F.Codd提出
    INGRES所用的QUEL语言是参照ALPHA语言研制的
    语句
    检索语句
    GET
    更新语句
    PUT,HOLD,UPDATEDELETEDROP
    

    检索操作

    语句格式:
         GET 工作空间名  [(定额)](表达式1)
                   [:操作条件] [DOWN/UP 表达式2]
     定额:规定检索的元组个数
    格式:        数字
    表达式1:指定语句的操作对象
    格式:
    关系名| 关系名. 属性名| 元组变量. 属性名| 集函数 [,…  ]
    操作条件:将操作结果限定在满足条件的元组中
    格式:        逻辑表达式
    表达式2:指定排序方式
    格式:        关系名. 属性名| 元组变量. 属性名[,…  ]
    

    (1)简单检索

    GET 工作空间名 (表达式1)
    

    [例1] 查询所有被选修的课程号码。
    GET W (SC.Cno)
    [例2] 查询所有学生的数据。
    GET W (Student)
    格式
    GET 工作空间名(表达式1):操作条件

    [例3]查询信息系(IS)中年龄小于20岁的学生的学号和年龄
        GET  W  (Student.SnoStudent.Sage): 
         Student.Sdept='IS' Student.Sage<20

    格式
    GET 工作空间名(表达式1)[:操作条件]
    DOWN/UP 表达式2

      [例4]查询计算机科学系(CS)学生的学号、年龄,结果按年龄降   
               序排序
        GET  W  (Student.Sno,Student.Sage):
                   Student.Sdept='CS‘ DOWN Student.Sage

    格式
    GET 工作空间名(定额)(表达式1)
    [:操作条件] [DOWN/UP 表达式2]

    [例5]  取出一个信息系学生的学号。
        GET  W  (1)  (Student.Sno):
                 Student.Sdept='IS' 
    [例6]  查询信息系年龄最大的三个学生的学号及其年龄,结果按年龄降序排序。
            GET  W (3)  (Student.Sno,Student.Sage):
             Student.Sdept='IS' DOWN Student.Sage

    用元组变量的检索

    元组变量的含义
    表示可以在某一关系范围内变化(也称为范围变量Range Variable)
    元组变量的用途
    ① 简化关系名:设一个较短名字的元组变量来代替较长的关系名。
    ② 操作条件中使用量词时必须用元组变量。
    定义元组变量
    格式:RANGE 关系名 变量名
    一个关系可以设多个元组变量

    用存在量词的检索

    操作条件中使用量词时必须用元组变量

    [例8]  查询选修2号课程的学生名字。
       RANGE  SC  XGET W (Student.Sname): X(X.Sno=Student.SnoX.Cno='2')
    [例9] 查询选修了这样课程的学生学号,其直接先行课是6号课程。
       RANGE Course  CX
       GET  W  (SC.Sno): 
      CX (CX.Cno=SC.Cno∧CX.Pcno='6')
    [例10]查询至少选修一门其先行课为6号课程的学生名字
               RANGE  Course  CX
                                  SC        SCX
                GET  W  (Student.Sname): SCX (SCX.Sno=Student.Sno∧
                                       CX (CX.Cno=SCX.Cno∧CX.Pcno='6')) 
     前束范式形式: 
                  GET  W  (Student.Sname): 
                          SCXCX (SCX.Sno=Student.Sno∧                                          
                                             CX.Cno=SCX.Cno∧CX.Pcno='6')
    

    带有多个关系的表达式的检索

     [例11]  查询成绩为90分以上的学生名字与课程名字。
         RANGE  SC  SCX
         GET  W(Student.Sname,Course.Cname):       
                SCX (SCX.Grade90 ∧ 
                  SCX.Sno=Student.Sno∧
                  Course.Cno=SCX.Cno)
    

    用全称量词的检索

     [例12]  查询不选1号课程的学生名字
              RANGE  SC  SCX
              GET  W (Student.Sname):
             SCX (SCX.Sno≠Student.Sno∨SCX.Cno'1')
    用存在量词表示:
              RANGE  SC  SCX
              GET  W  (Student.Sname): 
       SCX (SCX.Sno=Student.Sno∧SCX.Cno='1')
    

    用两种量词的检索

    [例13]  查询选修了全部课程的学生姓名。
              RANGE  Course  CX
                             SC         SCX
              GET  W  (Student.Sname): 
       CX SCX (SCX.Sno=Student.Sno∧ 
                    SCX.Cno=CX.Cno)
    

    用蕴函(Implication)的检索

     [例14]  查询最少选修了200215122学生所选课程的学生学号
              RANGE  Couse  CX
                               SC     SCX 
                               SC     SCY
              GET  W  (Student.Sno):      CX(SCX
              (SCX.Sno=‘200215122'∧SCX.Cno=CX.Cno)SCY(SCY.Sno=Student.Sno∧                                                                   SCY.Cno= CX.Cno))
    

    聚集函数

    [例15]  查询学生所在系的数目。
             GET  W  ( COUNT(Student.Sdept) )
          COUNT函数在计数时会自动排除重复值。
    
    [例16]  查询信息系学生的平均年龄
                  GET  W  (AVG(Student.Sage):                  
                  Student.Sdept='IS’  )
    
    展开全文
  • 目录元组关系演算原子公式有三类:公式可以递归定义如下:例子资料参考 元组关系演算 之前学习了一下关系代数表达式,现在再学习一下元组关系的演算,这样就全了。这篇东西的符号打出来费了好多时间,比较麻烦,还...
  • 数据库——关系演算

    2019-06-16 16:01:00
    关系演算 以数理逻辑中的谓词演算为基础 元组关系演算语言ALPHA 由E.F.Codd提出,以数理逻辑中的谓词演算为基础语句 检索语句(查询)GET 更新语句PUT,HOLD,UPDATE,DELETE,DROP 一、检索操作 (1) 简单检索...

    关系演算

    以数理逻辑中的谓词演算为基础

    元组关系演算语言ALPHA

    由E.F.Codd提出,以数理逻辑中的谓词演算为基础
    语句


    检索语句(查询)
    GET


    更新语句
    PUT,HOLD,UPDATE,DELETE,DROP

    一、检索操作

    (1) 简单检索(即不带条件的检索)
    (2) 限定的检索(即带条件的检索)
    (3) 带排序的检索
    (4) 带定额的检索
    (5) 用元组变量的检索
    (6) 用存在量词的检索
    (7) 带有多个关系的表达式的检索
    (8) 用全称量词的检索
    (9) 用两种量词的检索
    (10) 用蕴函(Implication)的检索
     

    (1)简单检索

       GET 工作空间名 (表达式)

    [例1]  查询所有被选修的课程号码。

    GET  W  (SC.Cno) 

    [例2]  查询所有学生的数据。

    GET  W  (Student)

    (2)限定的检索

        GET 工作空间名(表达式):操作条件

    [例3]查询信息系(IS) 年龄小于20岁的学号和年龄。

     GET  W  (Student.Sno,Student.Sage): Student.Sdept='IS'∧student.Sage<20

      [例 补充]查询选1号课的学生名和成绩

     GET W (Student.Sname,SC.grade): SC.CNO=1 ∧ Student.Sno=SC.Sno

    (3)带排序的检索

    [例4]  查询计算机科学系(CS)学生的学号、年龄,结果按年龄降序排序。

    GET  W  (Student.Sno,Student.Sage): Student.Sdept='CS' DOWN Student.Sage

    排序关键字: UP升序  DOWN降序

    (4)带定额的检索

    [例6]  查询信息系年龄最大的三个学生的学号及其年龄,结果按年龄降序排序。

    GET  W (3)  (Student.Sno,Student.Sage): Student.Sdept='IS' DOWN Student.Sage

    (5)用元组变量的检索

    元组变量:  取值在某关系内元组的量,用于形成查询条件

    定义元组变量
    格式:    RANGE  关系名  变量名
    例如:
             

        RANGE  STUDENT  X

      (6) 用存在量词的检索

    [例8]  查询选修2号课程的学生名字。

       RANGE  SC  X
       GET W (Student.Sname): 存在X (X.Sno=Student.Sno∧X.Cno=2)

    查询语义:查询这样的学生名,条件是存在选课元组X,X的学号与该生的学号相等并且X的课号为2(表明该生选了2号课)
    记住:  当查询条件来自工作区以外的关系时, 要使用元组变量和量词.  
     先定义元组变量, 在查询条件中用量词引入元组变量.

    请对比下面两个查询

    查询选修2号课程的学生名字。

    条件来自工作区外的关系

      RANGE  SC  X  
      GET W (Student.Sname):存在 X(X.Sno=Student.Sno∧X.Cno=2)

     

      查询选修2号课的学生名和成绩

    条件来自工作区内的关系

      GET W (Student.Sname,SC.grade): Student.Sno=SC.Sno ∧ SC.CNO=2 

     


     [例9] 查询选修了这样课程的学生学号,其先行课是6号课程。

     RANGE Course  CX
     GET  W  (SC.Sno): 存在 CX (CX.Cno=SC.Cno∧CX.Pcno=6)

     

    查询CS系选修2号课程的学生名字?

     RANGE  SC  X
     GET W (Student.Sname): Student.Sdept= 'CS' ∧存在 X (X.Sno=Student.Sno∧X.Cno=2)

    第一个条件只用到学生表,  直接给出,第二个条件则需要元组变量和存在量词来表示了。

    [例10]查询选修了先行课为6号课的课程的学生名

      RANGE  Course  CX
      RANGE  SC  SCX
      GET W (Student.Sname):存在 SCX(SCX.Sno=Student.Sno ∧ 存在 CX(CX.Cno=SCX.Cno∧CX.Pcno=6))
    

     

    改为前束范式形式:

     RANGE  Course  CX
     RANGE  SC  SCX
     GET  W  (Student.Sname):存在 SCX 存在 CX (SCX.Sno=Student.Sno ∧ CX.Cno=SCX.Cno ∧ CX.Pcno=6)

    (7)带有多个关系的表达式的检索

    [例11]  查询成绩为90分以上的学生名与课程名。(工作区的关系,不用定义元组变量)

    RANGE  SC  SCX
    GET W(Student.Sname,Course.Cname): 存在 SCX (  SCX.Sno=Student.Sno ∧ Course.Cno=SCX.Cno ∧ SCX.Grade≥90)

    练习

    查询CS系的学生名

    GET W(STUDENT.SNAME):STUDENT.SDEPT='CS'

    查询选1号课的学号,成绩

    GET W(SC.SNO, SC.GRADE):SC.CNO=1

    查询先行课为6的课名

    GET W(COURSE.CNAME):COURSE.CPNO=6

    查询选过课的学生名

    RANGE  SC   X
    GET W(Student.Sname): 存在 X (X.Sno=Student.Sno)

    查询选1号课的学生名

    RANGE  SC   X
    GET W(Student.Sname): 存在 X (X.Sno=Student.Sno∧X.Cno=1)

    查询CS系选1号课的学生名

    RANGE  SC   X
    GET W(Student.Sname):  Student.Sdept='CS' ∧ 存在 X (X.Sno=Student.Sno∧X.Cno=1)

    查询被选过的课名

    RANGE  SC   X
    GET W(Course.Cname): 存在 X(X.Cno=Course.Cno)

    查询学号为95001学生选的课名

    RANGE  SC   X
    GET W(Course.Cname):存在 X (X.Cno=Course.Cno∧X.Sno=95001)

    查询CS系学生的课号,成绩

    RANGE  Student   X
    GET W(SC.Cno, SC.Grade):存在 X (X.Sno=SC.Sno ∧ X.Sdept='CS')

    查询选修数据库原理课的学号,成绩

    RANGE   Course  X
    GET W(SC.Sno, SC.Grade):存在 X (X.Cno=SC.Cno∧X.Cname='数据库原理')

    查询CS系选修数据库原理课的学生姓名

    RANGE  SC    SCX
    RANGE  Course    CX
    GET W(Student.Sname):  Student.Sdept='CS' ∧ 存在 SCX 存在 CX (SCX.Sno=Student.Sno ∧ CX.Cno=SCX.Cno ∧ CX.Cname='数据库原理课')

    (8)用全称量词的检索 

    [例12]  查询不选1号课程的学生名字。查询语义:查询这样的学生,条件是对所有选课元组, 都不表明该生选了1号课(或者与该生学号不同, 或者课号不是1)

      RANGE  SC  SCX
      GET  W (Student.Sname): 任意 SCX ( SCX.Sno≠Student.Sno ∨ SCX.Cno≠1 )

    用存在量词代替全称量词


    对所有的x,P为真==不存在这样的x,P不为真

    (8)不用全称量词的检索

    [例12]  查询不选1号课程的学生名。
    查询语义:查询这样的学生,条件是不存在选课元组,学号与该生学号相同并且课号是1 (表明该生选了1号课)
    用存在量词表示:

    RANGE  SC  SCX
    GET  W  (Student.Sname): 不存在 SCX ( SCX.Sno=Student.Sno ∧ SCX.Cno=1 )

    对比使用全称量词

    RANGE  SC  SCX
    GET  W (Student.Sname): 任意 SCX ( SCX.Sno≠Student.Sno ∨ SCX.Cno≠1 )

    练习:改为没有选。。。。?

    查询选过课的学生名

    RANGE  SC  X
    GET W(Student.Sname):  存在 X (X.Sno=Student.Sno)

    查询选1号课的学生名

    RANGE  SC  X
    GET W(Student.Sname): 存在 X (X.Sno=Student.Sno∧X.Cno=1)

    查询CS系选1号课的学生名

    RANGE  SC  X
    GET W(Student.Sname):  Student.Sdept='CS' ∧ 存在 X (X.Sno=Student.Sno∧X.Cno=1)

    查询没有选过课的学生名

    RANGE  SC   X
    GET W(Student.Sname):  不存在 X (X.Sno=Student.Sno)

    查询没有选1号课的学生名

    RANGE  SC   X 
    GET W(Student.Sname): 不存在 X (X.Sno=Student.Sno∧X.Cno=1)

    查询CS系没有选1号课的学生名

    RANGE  SC    X
    GET W(Student.Sname):  Student.Sdept='CS' ∧ 不存在 X (X.Sno=Student.Sno∧X.Cno=1)

     题型没有...,用不存在

     

    (9)用两种量词的检索

    [例13]  查询选修了全部课程的学生姓名。
               
    求解思路:对于STUDENT中的一个学生,
              如果对所有的课程元组CX,都存在着SC的元组SCX,表明这个学生选修了CX,  则这个学生属于查询范围。

    RANGE  Course  CX
           SC     SCX
    GET W(Student.Sname): 任意 CX 存在 SCX(SCX.Sno=Student.Sno ∧ SCX.Cno=CX.Cno)

    短语:STUDENT选修了CX课  

    存在SCX(SCX.Sno=STUDENT.Sno ∧ SCX.Cno=CX.Cno)

     存在选课元组(选课元组与STUDENT和CX有关)

    (9)用存在量词代替全称量词

    求解思路:查询这样的学生,条件是不存在这样的课程这个学生未选

    RANGE  Course  CX
           SC    SCX
    GET W(Student.Sname): 不存在 CX 不存在 SCX(SCX.Sno=Student.Sno ∧ SCX.Cno=CX.Cno)

     

    短语:STUDENT选修了CX课

    存在 SCX(SCX.Sno=STUDENT.Sno ∧ SCX.Cno=CX.Cno)

    短语:STUDENT未选修CX课

    不存在 SCX(SCX.Sno=STUDENT.Sno ∧ SCX.Cno=CX.Cno)

    (10)用蕴函(Implication)的检索

    [例14]  查询选修了95002学生所选课程的学生学号。

       查询语义:查询这样的学生,条件是对所有课程,如果95002选了,则该学生也选修了该课

    RANGE  Course  CX
           SC     SCX
           SC     SCY
    GET  W  (Student.Sno): 任意 CX( 存在 SCX (SCX.Sno=95002∧SCX.Cno=CX.Cno) =》存在 SCY(SCY.Sno=Student.Sno∧ SCY.Cno= CX.Cno))

     

    (11)改为不用蕴函

       查询语义:
       对所有的课, 95002不选或者该学生选了。

    RANGE  Couse  CX
           SC     SCX 
           SC     SCY
    GET  W  (Student.Sno): 任意 CX( 不存在 SCX(SCX.Sno='95002'∧SCX.Cno=CX.Cno) 或者 存在 SCY(SCY.Sno=Student.Sno ∧ SCY.Cno= CX.Cno))

    (12)改为不用蕴函不用全称

    思路:不存在这样的课,95002选了并且这个学生未选

    RANGE  Couse  CX
           SC     SCX
           SC     SCY
    GET  W  (Student.Sno): 不存在 CX(存在 SCX (SCX.Sno=95002∧SCX.Cno=CX.Cno) ∧ 不存在 SCY(SCY.Sno=Student.Sno ∧ SCY.Cno= CX.Cno))

    使用离散数学的证明过程:

     

    图书管理数据库练习

    图书管理数据库有关系模式:
    图书(书号,书名,价格,作者)
    读者(读者号,姓名,性别,年龄)
    借阅(读者号,书号,借日期,还日期,罚款金额)

    用元组关系演算查询:
    1  查询价格大于50的书名和作者名
    2  查询(一次)罚款金额>20元的读者名
    3  查询被年龄大于60的读者借过的书名和作者名
    4  查询看了所有书的读者名
    5  查看了2001号读者所看过的所有书的读者号
    6  查询没有借过书的读者姓名

    1  查询价格大于50的书名和作者名

    GET  W(图书.书名, 图书.作者): 图书.价格>50

    关系代数?

    π 书名,作者名(σ 价格>50(图书))

     

    2  查询(一次)罚款金额>20元的读者名
    查询语义:查询这样的读者,条件是存在借阅元组表明该读者的罚款金额>20)

    RANGE  借阅   借阅X                     
    GET  W(读者.姓名): 存在 借阅X (借阅X.读者号=读者.读者号 并且 借阅X.罚款金额>20)

    关系代数?

    π 姓名(σ 罚款金额>20(借阅 连接 读者))

     

    3查询被年龄大于60的读者借过的书名和作者名
    查询语义:查询这样的图书,条件是存在借阅元组和读者元组,表明该图书被年龄大于60的读者借过

    RANGE  读者   读者X
    RANGE  借阅    借阅X
    GET  W(图书.书名, 图书.作者): 存在 借阅X 存在 读者X (借阅X.图书号=图书.图书号 并且 借阅X.读者号=读者X.读者号 并且 读者X.年龄>60)

    关系代数?

    π 作者,书名 (σ 年龄者>60 (读者 连接 借阅 连接 图书 ))

     

    4  查询看了所有书的读者名
       (用不存在量词)

    查询语义:查询这样的读者,条件是不存在这样的图书,该读者未看

    RANGE   图书  图书X
            借阅  借阅X
    GET  W(读者.姓名): 不存在 图书X (不存在 借阅X(借阅X.读者号=读者.读者号 并且 借阅X.图书号=图书X.图书号 ) )

    关系代数?

    π 姓名(( π 读者号,书号(借阅) ÷ π 书号(图书)) 连接 读者)

     


    5查看了2001号读者所看过的所有书的读者名
    查询语义: 查询这样的读者姓名,条件是对所有的图书, 如果存在借阅X 元组表明2001号读者借,  则存在借阅Y元组表明该读者也借

    RANGE   图书  图书X
    RANGE  借阅    借阅X
    RANGE  借阅    借阅Y
    GET  W(读者.姓名): 任意 图书X(存在 借阅X(借阅X.图书号=图书X.图书号 并且 借阅X.读者号=‘2001’ ) =》
    存在 借阅Y(借阅Y.读者号
    =读者.读者号 并且 借阅Y.图书号=图书X.图书号 ))

    上题不用全称和蕴涵实现
    查询语义: 查询这样的读者姓名,条件是不存在这样的图书, 2001借并且该读者不借(存在借阅X 元组表明2001号读者借并且不存在借阅Y元组表明该读者借)

    RANGE   图书  图书X
    RANGE  借阅    借阅X
    RANGE  借阅    借阅Y
    GET  W(读者.姓名): 不存在 图书X(存在 借阅X(借阅X.图书号=图书X.图书号 并且 借阅X.读者号=‘2001’ ) 
    不存在 借阅Y(借阅Y.读者号=读者.读者号 并且 借阅Y.图书号=图书X.图书号 ))

    关系代数?

     π 读者号,书号(借阅) ÷ π书号(σ 读者号=2001 (读者 连接 借阅))

     

    6  查询没有借过书的读者姓名
    解题思路:  查询读者名, 条件是不存在这样的借阅X,借阅X的读者号与该读者的读者号相等 

    GET  W(读者.姓名): 不存在 借阅X(借阅X.读者号=读者.读者号)

     关系代数?

    π姓名( ( π读者号 (读者) - π读者号 (借阅)) 连接 读者)

     

     

    工程供应数据库练习

    供应商-零件-工程-供应数据库关系模式
    S(SNO,SNAME,STATUS,CITY);
    P(PNO,PNAME,COLOR,WEIGHT);
    J(JNO,JNAME,CITY);
    SPJ(SNO,PNO,JNO,QTY);

    (1)求供应工程J1的供应商号
    关系代数:

    投影 SNO(选择 JNO=‘J1’(SPJ))

    关系演算:

    GET  W (SPJ.SNO):SPJ.JNO=‘J1’


    2)求供应工程J1零件P1的供应商号
    关系代数:

    投影 SNO(选择 JNO=‘J1’ 并且 PNO=‘P1’(SPJ))

    关系演算:

    GET  W (SPJ.SNO):SPJ.JNO=‘J1’ 并且 SPJ.PNO=‘P1’


    (3)求供应工程J1零件为红色的供应商号SNO
    关系代数:  

    GET  W (SPJ.SNO):SPJ.JNO=‘J1’并且 SPJ.PNO=‘P1’

    关系演算:

    RANGE  P   PX
    GET W(SPJ.SNO):  SPJ.JNO=‘J1’ 并且 存在 PX(PX.PNO=SPJ.PNO 并且 PX.COLOR=‘红’)

          
    (4)求没有使用天津供应商生产的红色零件的工程号JNO
    关系代数:

    投影 JNO(J)-投影 JNO(选择 CITY=‘天津’ 并且 COLOR=‘红’(S 连接 SPJ 连接 P))

    关系演算:
    从J中查询这样的JNO, 条件是不存在这样的供应元组SPJX表明该工程使用了天津生产的红色零件

    GET W(J.JNO): 不存在 SPJX( SPJX.JNO=J.JNO ∧ 存在 SX(SX.SNO=SPJX.SNO∧ SX.CITY=‘天津’) ∧ 存在 PX(PX.PNO=SPJX.PNO ∧ PX.COLOR=‘红’))


    (5)求至少用了供应商S1供应的所有零件的工程号JNO
    关系代数:

    投影 JNO,PNO(SPJ) 除 投影 PNO (选择 SNO=‘S1’(SPJ))

    从J中查询这样的工程号,条件是: 不存在这样的零件元组PX, S1供应而该工程不用

    GET W(J.JNO): 不存在 PX(
    存在 SPJX(SPJX.PNO=PX.PNO ∧ SPJX.SNO=‘S1’) ∧ 不存在 SPJY(SPJY.PNO=PX.PNO  ∧ SPJY.JNO=J.JNO ))

     

    (6) 查询使用了全部零件的工程号JNO
    关系代数:

    投影JNO,PNO(SPJ) 除 投影 PNO (SPJ)

    关系演算:
    从J中查询这样的工程号,条件是:不存在这样的零件元组PX, 该工程不用

    GET W(J.JNO): 不存在 PX( 不存在 SPJY(SPJY.PNO=PX.PNO  ∧ SPJY.JNO=J.JNO ))

     

























    转载于:https://www.cnblogs.com/wkfvawl/p/11031826.html

    展开全文
  • 数据库中元组关系演算 table, th, td { border: 1px solid black; } table, th, td { border: 1px solid black; } Tuple Relational Calculus is a non-procedural and declarative query language. The ...

    数据库中元组关系演算

    Tuple Relational Calculus is a non-procedural and declarative query language. The declarative query procedure gives logical condition which is required to be satisfied by the results. In the non-procedural query language, the user always tries to find out the details of how to get the results. Tuple Relational Calculus explains what to do by describing query but not explain how to do by does not provide the methods to solve.

    元组关系演算是一种非过程性和声明性查询语言。 声明性查询过程给出了结果必须满足的逻辑条件。 在非过程查询语言中,用户始终尝试查找如何获取结果的详细信息。 元组关系演算通过描述查询来解释做什么,但没有解释如何做则没有提供解决方法。

    Tuple Relational Calculus in a relation is specified in the selection of tuples with details. In relation, the tuples are used by filtering variables. The result which comes out as a resultant relation can have one or more than one tuples in a resultant relation. It is easy to use by someday who is not a skilled person also. Tuple variable which integrated with a relation is called the range relation.

    在选择具有详细信息的元组时,指定了关系中的元组关系演算 。 相对地,元组通过过滤变量来使用。 作为结果关系得出的结果在结果关系中可以具有一个或多个元组。 也有一天不是技术人员也容易使用。 与关系集成的元组变量称为范围关系。

    In Tuple Calculus, the notation of a query is:

    在Tuple Calculus中,查询的符号为:

     {T | P (T)}   or {T | Condition (T)}   
    

    Where,

    哪里,

    • T = resulting tuples,

      T =结果元组,

    • P(T) = called as Predicate and It is a condition which is used to fetch T.

      P(T) =称为谓词,它是用于获取T的条件

    Example

    Table 1: Engineer

    表1:工程师

    Engineer Name AddressCity
    RaghavA23/B6Mumbai
    Sameer567/453Delhi
    Sujata543/27Kanpur
    ShivaniD35Jaipur
    AmarB82/78Kolkata
    工程师姓名 地址
    拉加夫 A23 / B6 孟买
    沙美尔 567/453 新德里
    Sujata 543/27 坎普尔
    西瓦尼 D35 斋浦尔
    阿玛 B82 / 78 加尔各答

    Table 2: Company

    表2:公司

    Company City
    WiproChennai
    AccentureDelhi
    InfosysBangalore
    公司
    威普罗 钦奈
    埃森哲 新德里
    信息系统 班加罗尔

    Table 3: Salary

    表3:薪金

    Engineer Name CompanySalary
    RaghavWipro24,000
    SameerInfosys23,000
    SujataAccenture25,000
    ShivaniWipro27,000
    AmarAccenture30,000
    工程师姓名 公司 薪水
    拉加夫 威普罗 24,000
    沙美尔 信息系统 23,000
    Sujata 埃森哲 25,000
    西瓦尼 威普罗 27,000
    阿玛 埃森哲 30,000

    Table 4: Incentive + Bonus

    表4:奖励+奖金

    CompanyIncentive + Bonus
    Wipro4,000
    Accenture5,000
    Infosys7,000
    公司 激励+奖金
    威普罗 4,000
    埃森哲 5,000
    信息系统 7,000

    Table 5: Salary (Included Incentive + Bonus)

    表5:薪金(包括奖励+奖金)

    Engineer Name CompanySalary
    RaghavWipro28,000
    SameerInfosys30,000
    SujataAccenture30,000
    ShivaniWipro31,000
    AmarAccenture35,000
    工程师姓名 公司 薪水
    拉加夫 威普罗 28,000
    沙美尔 信息系统 30,000
    Sujata 埃森哲 30,000
    西瓦尼 威普罗 31,000
    阿玛 埃森哲 35,000

    Query 1: Find the Engineer Name, Company and Salary of those whose salaries are greater than 23,000 excluded Incentive + Bonus.

    查询1:找到薪金高于23,000(不含激励和奖金)的工程师的姓名,公司和薪水。

    {T| T ∈ Engineer ∧ T [Salary]>= 23,000}
    

    The Resultant relation is:

    结果关系为:

    Engineer Name Company Salary
    Raghav Wipro 24,000
    SujataAccenture25,000
    ShivaniWipro27,000
    AmarAccenture30,000
    工程师姓名 公司 薪水
    拉加夫 威普罗 24,000
    Sujata 埃森哲 25,000
    西瓦尼 威普罗 27,000
    阿玛 埃森哲 30,000

    In the above query, The T [Salary] is called as Tuple variable.

    在上面的查询中,T [Salary]被称为Tuple变量。

    Query 2: Find the Engineer Name of all the Company whose salaries are less than 27,000 excluded Incentive + Bonus.

    查询2:查找所有薪水少于27,000(不含激励和奖金)的公司的工程师名称。

    {T| ∃ S ∈ Engineer ( T[Company] = S[Company]
    ∧ S [Salary]< 27,000)}
    
    

    The Resultant relation is:

    结果关系为:

    Engineer Name
    Raghav
    Sameer
    Sujata
    工程师姓名
    拉加夫
    沙美尔
    Sujata

    Query 3: Find the Engineer Name of those who works in Accenture and their cities are Kanpur and Kolkata.

    问题3:找到在埃森哲工作的工程师的名字,他们的城市是坎普尔和加尔各答。

    {T| ∃ S ∈ Engineer (T [Engineer Name]) = S[Engineer Name])
    ∧∃ U ∈ Salary (T [Engineer Name] = U [Engineer Name])}
    
    

    The Resultant relation is:

    结果关系为:

    Engineer Name
    Sujata
    Amar
    工程师姓名
    Sujata
    阿玛

    Query 4: Find the Engineer Name of those whose salaries included incentive + Bonus is "30,000" and their cities are Delhi and Kanpur.

    查询4:找到薪金中包含奖励+奖金为“ 30,000”且其城市为德里和坎普尔的工程师的姓名。

    {T | ∃ S ∈ Engineer (T [City] = S[City]
    ∧  ∃ U ∈ Salary(Included Incentive + Bonus)(U[Salary] = "30,000"  
    ∧ U[Engineer Name] = S[Engineer Name] ) ) }
    
    

    The Resultant relation is:

    结果关系为:

    Engineer Name
    Sameer
    Sujata
    工程师姓名
    沙美尔
    Sujata

    翻译自: https://www.includehelp.com/dbms/tuple-relational-calculus.aspx

    数据库中元组关系演算

    展开全文
  • 关系演算 :以数理逻辑中的谓词演算为基础 按谓词变元不同分类 1.元组关系演算:以元组变量作为谓词变元的基本对象元组关系演算语言ALPHA2.域关系演算:以域变量作为谓词变元的基本对象域关系演算语言QBE 元组...
  • 数据库——关系演算ALPHA例题

    千次阅读 2020-04-13 21:54:23
    设有学生-课程关系数据库,它由三个关系组成,它们的模式是: ...请用关系演算ALPHA语言分别写出下列查询: (1) 检索学生的所有情况。 方法一:GET W(S) 方法二:GET W(S,SC,C):S.SNO=SC.SNO∧C...
  • 元组关系演算语言ALPHA简介一、检索操作(GET)1.简单检索2.带条件的检索3.带排序的检索4.带定额的检索5.用元组变量的检索6.用存在量词的检索7.带有多个关系的表达式的检索8.用全称量词的检索9.用两种量词的检索10.用...
  • 重点:全称量词与存在量词 关系: ...关系演算: 三、至少学过一门李明老师讲授课程的学生姓名(至少学过一门) 四、至少有一门李明老师讲授课程没有学过的学生姓名(至少有一门没学过)
  • 文章目录元组关系演算概述种类第一种R(t)第二种` t[i] θ u[j]`第三种` t[i] θ c 或 c θ t[i] ` 元组关系演算 概述 元组:表示关系表中的记录 元组变量:关系表中的某一条记录。 元组关系演算公式: 表示的关系表...
  • 基于《数据库系统概论》,讲述了关系演算语言,包括元组关系演算语言和域关系演算语言及其相关概念和简单示例
  • 关系演算属于了解内容 不需要重点掌握 基本内容 1.关系演算之关系元组演算 2.关系演算之关系域演算 3.关系演算之安全性 4.关于三种关系运算的一些观点 主要是元组演算和域演算 关系元组演算公式的定义方法...
  • 直观上,元组关系演算ALPHA中的存在量词和全称量词并不太好理解。本文虽对其做了一定的解释,但是依然可能显得不够。建议大家最好结合表实际演算,增加大家的直觉。 取定学生关系Student中的一个元组,设为t,现...
  • eg:把信息系女生95701, 姓名张三, 年龄17岁存入数据库中。      删除操作 eg: 删除学生95089 为保证参照完整性, 删除95089学生前, 先删除95089学生选 修的全部课程       ...
  • 第五讲:关系数据结构及关系完整性 关系数据结构 笛卡尔积 笛卡尔积:给定一组域D1,D2,…,Dn,允许其中某些域是相同的。1.其笛卡尔积是:D1×D2×...×Dn={(d1,d2,...dn)∣di∈Di,i=1,2,...,n}D_{1}\times D_{2}\...
  • 关系演算可分为元组演算与域演算 关系演算是基于元组进行操作 而域演算是基于一列中的每个值进行演算,域演算的过程性较差 域演算有QBE语言

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,750
精华内容 1,500
关键字:

数据库关系演算