热门关键字:  项目经理  分析师  中间件  CEO  报名费





域关系演算QBE

来源: 作者: 时间:2008-03-11 点击:
  • 关系演算的另一种形式是域关系演算。域关系演算以元组变量的分量即域变量作为谓词变元的基本对象。
  • QBE是Query By Example(即通过例子进行查询)的简称,其最突出的特点是它的操作方式。它是一种高度非过程化的基于屏幕表格的查询语言,用户通过终端屏幕编辑程序以填写表格的方式构造查询要求,而查询结果也是以表格形式显示,因此非常直观,易学易用。
  • QBE中用示例元素来表示查询结果可能的例子,示例元素实质上就是域变量。QBE操作框架如图2-10所示。
  • 252节的插图.GIF (2327 bytes)

    下面我们以学生-课程关系数据库为例,说明QBE的用法。  

    一、 检索操作
      (1) 简单查询
      例1 求信息系全体学生的姓名
     

    操作步骤为:
    1) 用户提出要求
    2) 屏幕显示空白表格

           
           
           

    3) 用户在最左边一栏输入关系名Student

    Student      

    4) 屏幕显示该关系的栏名,即Student关系的各个属性名

    Student Sno Sname Ssex Sage Sdept
               

    5) 用户在上面构造查询要求

    Student Sno Sname Ssex Sage Sdept
        P. T     CI

    这里T是示例元素,即域变量。QBE要求示例元素下面一定要加下划线。CI是查询条件,不用加下划线。P.是操作符,表示打印(Print),实际上就是显示。
    查询条件中可以使用比较运算符>,≥,<,≤,=和≠。其中=可以省略。
    示例元素是这个域中可能的一个值,它不必是查询结果中的元素。比如要求计算机科学系的学生,只要给出任意的一个学生名即可,而不必是计算机科学系的某个学生名。
    例如对于本例,可如下构造查询要求:

    Student Sno Sname Ssex Sage Sdept
        P.李勇     IS

    这里的查询条件是Sdept='IS',其中“=”被省略。
    6) 屏幕显示查询结果

               
               
               
    Student Sno Sname Ssex Sage Sdept
        P. T     CI

    这里T是示例元素,即域变量。QBE要求示例元素下面一定要加下划线。CI是查询条件,不用加下划线。P.是操作符,表示打印(Print),实际上就是显示。
    查询条件中可以使用比较运算符>,≥,<,≤,=和≠。其中=可以省略。
    示例元素是这个域中可能的一个值,它不必是查询结果中的元素。比如要求计算机科学系的学生,只要给出任意的一个学生名即可,而不必是计算机科学系的某个学生名。
    例如对于本例,可如下构造查询要求:

    Student Sno Sname Ssex Sage Sdept
        P.李勇     IS

    这里的查询条件是Sdept='IS',其中“=”被省略。
    6) 屏幕显示查询结果

    Student Sno Sname Ssex Sage Sdept
        刘晨      
        张立      

    根据用户构造的查询要求,这里只显示计算机科学系的学生姓名属性值。

      例2 查询全体学生的全部数据
     
    Student Sno Sname Ssex Sage Sdept
      P. 95001 P.李勇 P. P.20 P.CS

    显示全部数据也简单地把P.操作符作用在关系名上。因此本查询也可以简单地表示如下:

    Student Sno Sname Ssex Sage Sdept
    P.          

    显示全部数据也简单地把P.操作符作用在关系名上:


    (2) 条件查询
      例3 求年龄大于19岁的学生的学号
     
    Student Sno Sname Ssex Sage Sdept
      P.95001     >19  

    注意,查询条件中只能省略=比较运算符,其他比较运算符(如>)不能省略。

      例4 求计算机科学系年龄大于19岁的学生的学号
     


    本查询的条件是Sdept='CS'和Sage>19两个条件的“与”。在QBE中,表示两个条件的“与”有两种方法:

    1) 把两个条件写在同一行上:

    Student Sno Sname Ssex Sage Sdept
      P.95001     >19 CS

    2) 把两个条件写在不同行上,但使用相同的示例元素值:

    Student Sno Sname Ssex Sage Sdept
      P.95001       CS
      P.95001     >19  
      例5 查询计算机科学系或者年龄大于19岁的学生的学号
     

    本查询的条件是Sdept='CS'和Sage>19两个条件的“或”。在QBE中把两个条件写在不同行上,并且使用不同的示例元素值,即表示条件的“或”。

    Student Sno Sname Ssex Sage Sdept
      P.95001       CS
      P.95002     >19  

    对于多行条件的查询,如例4中的2)和例5,先输入哪一行是任意的,查询结果相同。这就允许查询者以不同的思考方式进行查询,十分灵活、自由。

      例6 查既选修了1号课程又选修了2号课程的学生的学号
     

    本查询条件是在一个属性中的“与”关系,它只能用“与”条件的第2)种方法表示,即写两行,但示例元素相同。

    SC Sno Cno Grade
      P.95001 1  
      P.95001 2  
      例7 查询选修1号课程的学生姓名
     

    本查询涉及两个关系:SC关系和Student关系。在QBE中实现这种查询的方法是通过相同的连接属性值把多个关系连接起来。

    Student Sno Sname Ssex Sage Sdept
      95001 P.李勇      
    SC Sno Cno Grade
      95001 1  

    这里示例元素Sno是连接属性,其值在两个表中要相同。

      例8 查询未选修1号课程的学生姓名
     

    这里的查询条件中用到逻辑非。在QBE&127;中表示逻辑非的方法是将逻辑非写在关系名下面。

    Student Sno Sname Ssex Sage Sdept
      95001 P.李勇      
    SC Sno Cno Grade
    95001 1  

    这个查询就是显示学号为95001的学生名字,而该学生选修了1号课程的情况为假。

      例9 查询有两个人以上选修的课程号
     

    本查询是在一个表内连接。

    SC Sno Cno Grade
      95001 P.1  
      フ95001 1  

    这个查询就是要显示这样的课程号1,它不仅被95001选修,而且另一个学生(フ95001)也选修了。

      (3) 集函数
    为了方便用户,QBE提供了一些集函数,主要包括CNT,SUM,AVG,MAX,MIN等,其含义如表所示。  
      详细信息…
     
      例10 查询信息系学生的平均年龄
     
      (4)对查询结果排序
      详细信息…
     
      例11 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序
     
    二、 更新操作
      (1) 修改操作
    修改操作符为“U.”。关系的主码不允许修改,如果需要修改某个元组的主码,只能间接进行,即首先删除该元组,然后再插入新的主码的元组。
      例12 把95001学生的年龄改为18岁
     


    这是一个简单修改操作,不包含算术表达式,因此可以有两种表示方法:
      ·将操作符“U.”放在值上

    Student Sno Sname Ssex Sage Sdept
      95001     U.18  

      ·将操作符“U.”放在关系上

    Student Sno Sname Ssex Sage Sdept
    U. 95001     18  

    这里,码95001标别要修改的元组。“U.”标明所在的行是修改后的新值。&127;由于主码是不能修改的,所以即使在第二种写法中,系统也不会混淆要修改的属性。

      例13 把95001学生的年龄增加1岁
     

    这个修改操作涉及表达式,所以只能将操作符“U.”放在关系上。

    Student Sno Sname Ssex Sage Sdept
    U. 95001     x  
    95001     x+1  
      例14 将计算机科学系所有学生的年龄都增加1岁
     
    Student Sno Sname Ssex Sage Sdept
    U. 95001     x CS
    95001     x+1  
      (2) 插入操作
    插入操作符为“I.”。新插入的元组必须具有码值,其他属性值可以为空。 
      例15 把信息系女生95701,姓名张三,年龄17岁存入数据库中
     
    Student Sno Sname Ssex Sage Sdept
    I. 95701 张三 17 IS
      (3) 删除操作
    删除操作符为“D.”。 
      例16 删除学生95089
     
    Student Sno Sname Ssex Sage Sdept
    D. 95089        

    由于SC关系与Student关系之间的具有参照关系,为保证参照完整性,删除95089学生后,通常还应删除95089学生选修的全部课程:

    SC Sno Cno Grade
    D. 95089    





    最新评论共有 0 位网友发表了评论
    发表评论
    评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
    用户名: 密码:
    匿名?
    注册
    企业电子商务

    赞助商