Presentation is loading. Please wait.

Presentation is loading. Please wait.

数据库技术 第二章 关系数据库 中国科学技术大学网络学院 阚卫华.

Similar presentations


Presentation on theme: "数据库技术 第二章 关系数据库 中国科学技术大学网络学院 阚卫华."— Presentation transcript:

1 数据库技术 第二章 关系数据库 中国科学技术大学网络学院 阚卫华

2 2.5 关系演算 关系演算: 种类:按谓词变元不同分类 以数理逻辑中的谓词演算为基础。 1.元组关系演算:以元组变量作为谓词变元的基本对象
2.5 关系演算 关系演算: 以数理逻辑中的谓词演算为基础。 种类:按谓词变元不同分类 1.元组关系演算:以元组变量作为谓词变元的基本对象   元组关系演算语言ALPHA;   元组关系演算。  2.域关系演算: *以域变量作为谓词变元的基本对象; 域关系演算语言QBE。 2018年9月20日星期四

3 三类关系运算的表达能力 理论上已经证明: 每一个关系代数表达式有一个等价的安全的元组演算表达式。
 三类关系运算的表达能力 理论上已经证明:    每一个关系代数表达式有一个等价的安全的元组演算表达式。    每一个安全的元组演算表达式有一个等价的安全的域演算表达式。    每一个安全的域演算表达式有一个等价的关系代数表达式。    因此,这三类关系运算的表达能力是等价的,可以互相转换。 2018年9月20日星期四

4 2.5.1 元组关系演算语言ALPHA     元组关系演算语言ALPHA :由E.F.Codd提出的典型的元组关系演算语言,该语言虽然没有实际实现,但INGRES所用的QUEL语言是参照ALPHA语言研制的。  语句主要有 一、检索语句:GET 二、更新语句: PUT,HOLD,UPDATE,DELETE,DROP 2018年9月20日星期四

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

6 检索操作 (续) (1) 简单检索(即不带条件的检索) (2) 限定的检索(即带条件的检索) (3) 带排序的检索 (4) 带定额的检索
  (1) 简单检索(即不带条件的检索) (2) 限定的检索(即带条件的检索) (3) 带排序的检索 (4) 带定额的检索 (5) 用元组变量的检索 (6) 用存在量词的检索 2018年9月20日星期四

7 检索操作 (续) (7) 带有多个关系的表达式的检索 (8) 用全称量词的检索 (9) 用两种量词的检索
(10) 用蕴函(Implication)的检索 (11) 集函数 2018年9月20日星期四

8 (1)简单检索(续) 格式 GET 工作空间名 (表达式1) 例1 查询所有被选修的课程号码。 GET W (SC.Cno)
例1 查询所有被选修的课程号码。 GET W (SC.Cno)  例2 查询所有学生的数据。 GET W (Student) 2018年9月20日星期四

9 检索操作 (续) (2)限定的检索 格式: GET 工作空间名(表达式1):操作条件
例3 查询信息系(IS)中年龄小于20岁的学生的学号和年龄。 GET W (Student.Sno,Student.Sage): Student.Sdept='IS'∧ Student.Sage<20 2018年9月20日星期四

10 (3)带排序的检索 格式 GET 工作空间名(表达式1)[:操作条件] DOWN/UP 表达式2
例4 查询计算机科学系(CS)学生的学号、年龄,结果按年龄降序排序。 GET W (Student.Sno,Student.Sage): Student.Sdept='CS ' DOWN Student.Sage 2018年9月20日星期四

11 (4)带定额的检索 格式 : 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 所谓带定额的检索是指规定了检索出元组的个数,方法是:在W后括号中加上定额数量. W(1) W (3) 2018年9月20日星期四

12 (5)用元组变量的检索 元组变量的含义 表示可以在某一关系范围内变化(也称为范围变量Range Variable) 元组变量的用途
① 简化关系名:设一个较短名字的元组变量来代替较长的关系名。 ② 操作条件中使用量词时必须用元组变量。 2018年9月20日星期四

13 (5)用元组变量的检索(续) 定义元组变量 格式: RANGE 关系名 变量名 一个关系可以设多个元组变量 例7 查询信息系学生的名字
例7 查询信息系学生的名字 RANGE Student X GET W (X.Sname):X.Sdept=`IS` 注: ALPHA语言用RANGE来说明元组变量.在本例中,X 是关系Student 上的元组变量, 即用 X 代表Student,用途是简化关系名. 2018年9月20日星期四

14 (6) 用存在量词的检索 例8 查询选修2号课程的学生名字。
例8 查询选修2号课程的学生名字。 RANGE SC X GET W (Student.Sname): X(X.Sno=Student.Sno∧X.Cno='2') 例9 查询选修了这样课程的学生学号,其直接先行课是6号课程。 RANGE Course CX GET W (SC.Sno): CX (CX.Cno=SC.Cno∧CX.Pcno='6') 注:操作条件 中使用量词时必须用元组变量 2018年9月20日星期四

15 用存在量词的检索(续) 例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') 2018年9月20日星期四

16 (7)带有多个关系的表达式的检索 例11 查询成绩为90分以上的学生名字与课程名字。 RANGE SC SCX
  例11 查询成绩为90分以上的学生名字与课程名字。 RANGE SC SCX GET W(Student.Sname,Course.Cname): SCX (SCX.Grade≥90∧ SCX.Sno=Student.Sno∧ Course.Cno=SCX.Cno)     注:虽然查询时可能会涉及多个关系,即公式中可能涉及多个关系,但查询结果表达式中只有一个关系。实际上,表达式中是可以有多个关系的。 2018年9月20日星期四

17 (8)用全称量词的检索 例12 查询不选1号课程的学生名字。 RANGE SC SCX GET W (Student.Sname):
例12 查询不选1号课程的学生名字。 RANGE SC SCX GET W (Student.Sname): (SCX.Sno≠Student.Sno∨SCX.Cno≠ '1') 或用存在量词表示: GET W (Student.Sname): SCX (SCX.Sno=Student.Sno∧SCX.Cno='1') ∀ SCX 2018年9月20日星期四

18 (9)用两种量词的检索 例13 查询选修了全部课程的学生姓名。 RANGE Course CX SC SCX
例13 查询选修了全部课程的学生姓名。 RANGE Course CX SC SCX GET W (Student.Sname): ∀ CX  SCX (SCX.Sno=Student.Sno∧ SCX.Cno=CX.Cno) 2018年9月20日星期四

19 (10)用蕴函(Implication)的检索
   例14 查询最少选修了95002学生所选课程的学生学号。   分析:本题的求解思路是:对Course中的所有课程,依次检查每一门课程,看95002是否选修了该课程。如果选修了,则再看某一个学生是否了也选修了该门课。如果对于95002所选的每门课程该学生都选修了,则该学生为满足要求的学生。把所有这样的学生全部都找出来即完成了本题。 2018年9月20日星期四

20 (10)用蕴函(Implication)的检索(续)
  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)) 注意:这里SC设了两个元组变量 2018年9月20日星期四

21 (11)集函数 常用集函数(Aggregation function)或 内部函数(Build-in function) 函 数 名 功 能
功 能 COUNT 对元组计数 TOTAL 求 总 和 MAX 求最大值 MIN 求最小值 AVG 求平均值 2018年9月20日星期四

22 集函数(续) 例15 查询学生所在系的数目。 例16 查询信息系学生的平均年龄 GET W ( COUNT(Student.Sdept) )
 例15  查询学生所在系的数目。 GET W ( COUNT(Student.Sdept) ) 注:COUNT函数在计数时会自动排除重复值。  例16  查询信息系学生的平均年龄      GET W (AVG(Student.Sage): Student.Sdept = 'IS ' ) 2018年9月20日星期四

23 二、更新操作 (1) 修改操作 (2) 插入操作 (3) 删除操作 2018年9月20日星期四

24 (1)修改操作步骤 ① 用HOLD语句将要修改的元组从数据库中读到工作空间中: HOLD 工作空间名(表达式1)[:操作条件 ]
HOLD语句是带上并发控制的GET语句。 ② 用宿主语言修改工作空间中元组的属性。 ③ 用UPDATE语句将修改后的元组送回数据库中: UPDATE 工作空间名 2018年9月20日星期四

25 (1)修改操作步骤(续)    需要注意的是,单纯检索数据使用GET语句即可,但为了修改数据而读元组时必须使用HOLD语句, HOLD语句是带上并发控制的语句。 2018年9月20日星期四

26 修改操作(续) 例17 把95007学生从计算机科学系转到信息系。 HOLD W (Student.Sno, Student.Sdetp):
MOVE 'IS' TO W.Sdept (用宿主语言进行修改) UPDATE W (把修改后的元组送回Student关系) 2018年9月20日星期四

27 例17(续) 在该例中,用HOLD语句来读95007的数据,而不是用GET语句;
  如果修改操作涉及到两个关系的话,就要执行两次HOLD-MOVE-UPDATE操作序列;   在ALPHA语言中,修改关系主码的操作是不允许的,例如,不能用UPDATE语句将该学号95001改为95002。如果需要修改主码值,只能先用删除操作删除该元组,然后用再把具有新主码值的元组插入到关系中。 2018年9月20日星期四

28 (2)插入操作 插入操作步骤: PUT语句只对一个关系操作(即表达式必须为单个关系名)。 ① 用宿主语言在工作空间中建立新元组。
   PUT语句只对一个关系操作(即表达式必须为单个关系名)。 2018年9月20日星期四

29 插入操作(续) 例18 学校新开设了一门2学分的课程“计算机组织与结构”,其课程号为8,直接先行课为6号课程。插入该课程元组。
 例18  学校新开设了一门2学分的课程“计算机组织与结构”,其课程号为8,直接先行课为6号课程。插入该课程元组。    MOVE '8' TO W.Cno MOVE '计算机组织与结构' TO W.Cname MOVE '6' TO W.Cpno MOVE '2' TO W.Ccredit PUT W (Course) 2018年9月20日星期四

30 (3)删除操作 ① 用HOLD语句把要删除的元组从数据库中读到工作空间中; ② 用DELETE语句删除该元组: DELETE 工作空间名
2018年9月20日星期四

31 删除操作(续) 例19 95110学生因故退学,删除该学生元组。 HOLD W (Student): Student.Sno='95110'
 例19  95110学生因故退学,删除该学生元组。 HOLD W (Student): Student.Sno='95110' DELETE W  2018年9月20日星期四

32 删除操作(续) 例20 将学号95001改为95102。 HOLD W (Student): Student.Sno='95001'
 例20  将学号95001改为95102。 HOLD W (Student): Student.Sno='95001' DELETE W MOVE '95102' TO W.Sno MOVE '李勇' TO W.Sname MOVE '男' TO W.Ssex MOVE '20' TO W.Sage MOVE 'CS' TO W.Sdept PUT W (Student)  返回P26 2018年9月20日星期四

33 删除操作(续) 例21 删除全部学生。 HOLD W (SC) DELETE W
 例21  删除全部学生。 HOLD W (SC) DELETE W     在删除操作中保持参照完整性由于SC关系与Student关系之间的具有参照关系,为保证参照完整性,删除Student中元组时相应地要删除SC中的元组(手工删除或由DBMS自动执行): HOLD W (Student) DELETE W 2018年9月20日星期四

34 元组关系演算语言   元组关系演算语言是一种抽象的关系演算语言(上一节讨论的元组关系演算语言ALPHA是一种具体的元组关系演算语言)。    为了讨论方便,先允许关系(的基数)是无限的,然后再对这种情况下定义的演算作适当的修改,从而保证演算中的每一个公式表示的是有限关系。 2018年9月20日星期四

35 (一)原子公式    在元组关系演算系统中,称      { t | φ(t) }   为元组演算表达式。其中 t 是元组变量, φ(t)为元组关系演算公式,简称公式。它由原子公式和运算符组成。    原子公式有三类:    1.  R (t)      R是关系名, t是元组变量。 R (t) 表示t是R中的元组。于是,关系R可表示为:    { t | R (t)} 2018年9月20日星期四

36 该公式表示“t的第i个分量与常量c满足比较关系θ”。 例如,t [ 4] =3 表示:元组t的第4个分量等于3。
 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 ]   该公式表示“t的第i个分量与常量c满足比较关系θ”。   例如,t [ 4] =3 表示:元组t的第4个分量等于3。 2018年9月20日星期四

37 (二)公式的递归定义     在关系演算中,定义了“自由元组变量”和“约束元组变量” 的概念。这些概念与在谓词演算中的概念完全一样。如果公式中的一个元组变量前有“全称量词”或“存在量词”,我们称该变量为约束元组变量,否则称该变量为自由元组变量。    公式可以递归定义如下:  (1)每个原子公式是公式。  (2)如果 φ1 和 φ2 是公式,则φ1 ∧ φ2 ,φ1 ∨φ2 , ┓φ1 也是公式。分别表示为: 2018年9月20日星期四

38 如果φ1 和φ2同时为真,则 φ1 ∧ φ2 才为真,否则为假;
   如果φ1 和φ2同时为真,则 φ1 ∧ φ2 才为真,否则为假;    如果φ1 和φ2 中有一个为真或同时为真,则 φ1 ∨φ2 为真,仅当φ1 和φ2同时为假时, φ1 ∨φ2 才为假;    如果 φ1 为真,则┓φ1为假。  (3)若φ是公式,则 ∃t(φ)也是公式。其中符号∃是存在量词符号, ∃ t(φ) 表示:若有一个 t 使φ 为真,则∃ t(φ)为真,否则 ∃ t(φ) 为假。 2018年9月20日星期四

39 (5)在元组演算公式中,各种运算符的优先次序为: ①算术比较运算符最高; ②量词次之,且存在量词∃的优先级高于全称量词∀(所有)的优先级;
  (4)若φ是公式,则∀t(φ)也是公式。其中符号∀是全称量词符号, ∀t(φ) 表示:如果对所有 t,都使φ为真,则∀t(φ) 为真,否则∀t(φ) 为假。    (5)在元组演算公式中,各种运算符的优先次序为:  ①算术比较运算符最高;  ②量词次之,且存在量词∃的优先级高于全称量词∀(所有)的优先级; 2018年9月20日星期四

40 ③逻辑运算符最低,且逻辑非┓的优先级高于逻辑与∧的优先级,逻辑与∧的优先级高于逻辑或∨的优先级;
   ③逻辑运算符最低,且逻辑非┓的优先级高于逻辑与∧的优先级,逻辑与∧的优先级高于逻辑或∨的优先级;    ④加括号时,括号中运算符优先;同一括号内的运算符的优先级遵循上述各项的规定。  (6)有限次地使用上述五条规则得到的公式是元组关系演算公式,其它公式不是元组关系演算公式。    一个元组演算表达式{ t | φ(t)}表示了使φ(t)为真的元组集合。 2018年9月20日星期四

41 (三)元组演算表达式的五种基本运算 关系代数的运算均可以用关系演算表达式来表示(反过来也是这样)。 元组演算表达式的五种基本运算:
(三)元组演算表达式的五种基本运算     关系代数的运算均可以用关系演算表达式来表示(反过来也是这样)。   元组演算表达式的五种基本运算:  (1)并: R ∪ S = { t | R(t) ∨ S(t) }   (2)差: R - S = {t | R(t) ∧ ┓S(t)}  (3)笛卡儿积:  R × S = {t (m+n) | ( ∃u(n)) (∃ v(m)) (R(u) ∧S(v) ∧t[1]=u[1] ∧… ∧ t[n]=u[n] ∧ t[n+1]=v[1] ∧ … ∧ t[n+m]=u[m])} 注:t (m+n)表示t有目数(n+m) 2018年9月20日星期四

42 π i1,i2, …,ik (R) = {t (k) | ( ∃u) (R(u) ∧t[1]=u[i1] ∧… ∧ t[k]=u[ik])}
 (4)投影: π i1,i2, …,ik (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 ={ t | Student(t) ∧t[5]= `IS` } 2018年9月20日星期四

43 S 20 ={ t | Student(t) ∧t[4]< 20 } 注: 例1、例2中t的目数与原关系相同;
 例2. 查询年龄小于20岁的学生。 S 20 ={ t | Student(t) ∧t[4]< 20 }  注: 例1、例2中t的目数与原关系相同;  例3. 查询学生的姓名和所在系。 S 1 ={ t(2) | ( ∃u) (Student(u) ∧t[1]=u[2] ∧t[2]= u[5] )} 注: 例3中t为查询后的元组 ;目数为2;u∈Student. 2018年9月20日星期四

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

45 当满足下列条件时,元组演算表达式{t| φ(t)是安全的: (1) 如果t使 φ(t)为真,则 t 的每个分量是 dom(φ) 中的元素。
  (2) 对于φ中的每一个形如(∃ u)(W(u)) 的子表达式,若u使W(u)为真,则 u的每个分量是dom(φ) 中的元素。   (3) 对于φ中的每一个形如(∀ u)(W(u)) 的子表达 式,若u使W(u)为假,则 u的每个分量必属于 dom(φ) 。或者说,若u某个分量不属于 dom(φ) ,则 W(u) 为真。 2018年9月20日星期四

46 若不进行安全限制,则可能是一个无限关系。所以定义
 例4 设有关系R如下图(a)所示, S= {t | ┓R(t) },      (a)    若不进行安全限制,则可能是一个无限关系。所以定义 A B C a1 b1 c1 a2 b2 c2 2018年9月20日星期四

47 则S是dom(φ)中各域值中元素的笛卡儿积与R的差积。
   dom(φ) = πA(R) ∪ πB(R) ∪ πC(R) ={{a1,a2},{b1,b2},{c1,c2}}    则S是dom(φ)中各域值中元素的笛卡儿积与R的差积。    注意:在做笛卡儿积时,各个域中的元素不能颠倒。图如下页(b)所示: 2018年9月20日星期四

48 图 (b) A B C a1 b1 c2 a1 b2 c1 a1 b2 c2 a2 b1 c1 a2 b1 c2 a2 b2 c1
2018年9月20日星期四

49 2.5.3 域关系演算语言QBE (域关系演算以元组变量的分量即域变量作为谓词变元的基本对象)
⊙ QBE(Query By Example):通过例子进行查询的简称; ⊙ 一种典型的域关系演算语言 (域关系演算以元组变量的分量即域变量作为谓词变元的基本对象) 1975年,由M.M.Zloof提出 1978年,在IBM370上得以实现 QBE也指此关系数据库管理系统 2018年9月20日星期四

50 QBE的特点 QBE的最突出的特点是它的操作方式: (它是一种高度非过程化的)基于屏幕表格的查询语言;
查询要求:(用户通过终端屏幕编辑程序)以填写表格的方式构造查询方式; 查询结果:以表格形式显示,用示例元素(即域变量)来表示查询结果可能的情况。 2018年9月20日星期四

51 QBE操作框架 关系名 属性名 操作命令 元组属性值或查询条件或操作命令 2018年9月20日星期四

52 一、检索操作 (3)用户在最左边一栏输入要查询的关系名,例如 Student; (1)用户提出要求; (2)屏幕显示空白表格;
  (3)用户在最左边一栏输入要查询的关系名,例如 Student; Student 2018年9月20日星期四

53 检索操作(续) (4)系统显示该关系的属性名 (5)用户在上面构造查询要求 Student Sno Sname Ssex Sage
Sdept Student Sno Sname Ssex Sage Sdept P. T IS 2018年9月20日星期四

54 检索操作(续) (6)屏幕显示查询结果 根据用户的查询要求,求出了信息系的学生姓名。 Student Sno Sname Ssex Sage
   根据用户的查询要求,求出了信息系的学生姓名。 Student Sno Sname Ssex Sage Sdept 李勇 张立 IS 2018年9月20日星期四

55 构造查询的几个要素 T :示例元素即域变量,一定要加下划线;
   示例元素是这个域中可能的一个值,它不必是查询结果中的元素。例如,要求信息系的学生,只要给出任意一个学生名即可,而不必真是信息系的某个学生名。 P. : 打印操作符,表示打印(实际上是显示),即指定查询结果所含属性列。  查询条件 :可使用比较运算符>,≥,<,≤,=和≠;不用加下划线;其中=可以省略。例如, 2018年9月20日星期四

56 这里的查询条件是Sdept=`IS`,其中“=”被省略。 Student Sno Sname Ssex Sage Sdept
对于例4,可构造如下查询要求: 这里的查询条件是Sdept=`IS`,其中“=”被省略。 Student Sno Sname Ssex Sage Sdept P. 李勇 IS 2018年9月20日星期四

57 1. 简单查询 例1 查询全体学生的全部数据。 Student Sno Sname Ssex Sage Sdept P.95001
例1 查询全体学生的全部数据。 Student Sno Sname Ssex Sage Sdept P.95001 P. 李勇 P.男 P.20 P.CS 2018年9月20日星期四

58 简单查询(续) 显示全部数据也可以简单地把P.操作符作用在关系名上,因此,本查询也可以简单地表示为: P. Student Sno
Sname Ssex Sage Sdept   P. 2018年9月20日星期四

59 条件查询(续) [例3] 求年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage Sdept P.95001
 [例3] 求年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage Sdept P.95001 >19 2018年9月20日星期四

60 条件查询(与条件) [例4] 求计算机科学系年龄大于19岁的学生的学号。 方法(1):把两个条件写在同一行上: Student Sno
[例4] 求计算机科学系年龄大于19岁的学生的学号。 方法(1):把两个条件写在同一行上: Student Sno Sname Ssex Sage Sdept P.95001 >19 CS 2018年9月20日星期四

61 条件查询(续) 方法(2):把两个条件写在不同行上,但使 用相同的示例元素值: Student Sno Sname Ssex Sage
Sdept P.95001 >19 CS 2018年9月20日星期四

62 条件查询(续) 例5 查询计算机科学系或者年龄大于19岁的学生的学号。
   例5 查询计算机科学系或者年龄大于19岁的学生的学号。    本查询的条件是Sdept=‘CS’和Sage>19两个条件的“或”。在QBE中,把两个条件写在不同行上,并且使用不同的示例元素值,即表示条件的“或”。 Student Sno Sname Ssex Sage Sdept P.95001 P.95002 >19 CS 2018年9月20日星期四

63 条件查询(续) 例6 查询既选修了1号课程又选修了2号课程的学生的学号。
  例6 查询既选修了1号课程又选修了2号课程的学生的学号。    本查询条件是在一个属性中的 “与”关系,它只能用“与”条件的第(2)种方法表示,即写成两行,但示例元素相同。 SC Sno Cno Grade P.95001 1 2 2018年9月20日星期四

64 多表连接 例7 查询选修1号课程的学生姓名。 注意:示例元素Sno是连接属性,其值在两个表中要相同。 Cno
 例7 查询选修1号课程的学生姓名。    本查询涉及两个关系:SC和Student。在QBE中,实现这种查询的方法是通过相同的连接属性值,把多个关系连接起来。 注意:示例元素Sno是连接属性,其值在两个表中要相同。 SC Sno Cno Grade 95001 1 Student Sname Ssex Sage Sdept P.李勇 2018年9月20日星期四

65 条件查询(非条件) 例8 查询未选修1号课程的学生姓名。 这里的查询条件中用到逻辑非。在QBE中表示逻辑非的方法是将逻辑非写在关系名的下面。
 例8 查询未选修1号课程的学生姓名。   这里的查询条件中用到逻辑非。在QBE中表示逻辑非的方法是将逻辑非写在关系名的下面。  该查询即为显示学号为95001的学生名字,而该学生选修1号课程的情况为假。 SC Sno Cno Grade 95001 1 Student Sname Ssex Sage Sdept P.李勇 2018年9月20日星期四

66 条件查询(续) 例9 查询有两个人以上选修的课程号。
例9  查询有两个人以上选修的课程号。    本查询是在一个表内连接。查询这样的课程1,它不仅被95001选修,而且也被另一个学生(95001)选修了。 SC Sno Cno Grade 95001 .95001 P.1 1 2018年9月20日星期四

67 3. 集函数 QBE中的常用集函数: 函 数 名 功 能 CNT 对元组计数 SUM 求 总 和 AVG 求平均值 MAX 求最大值 MIN
功 能 CNT 对元组计数 SUM 求 总 和 AVG 求平均值 MAX 求最大值 MIN 求最小值 2018年9月20日星期四

68 集函数(续) 例10 查询信息系学生的平均年龄。 Student Sno Sname Ssex Sage Sdept P.AVG.ALL.
 例10 查询信息系学生的平均年龄。 Student Sno Sname Ssex Sage Sdept P.AVG.ALL. IS 2018年9月20日星期四

69 4.对查询结果排序(续) 例11 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。
 例11 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。 对查询结果按某个属性值的升序排序,只需在相应的列中填入“AO.”,按降序排序则填入“DO.” 。如果按多列排序,用“AO(i).”或“DO (i).”表示 ,其中i为排序的优先级, i值越小,优先级越高。    查询结果: 2018年9月20日星期四

70 Student Sno Sname Ssex Sage Sdept P.李勇 DO(2). AO(1). 2018年9月20日星期四

71 二、修改操作  1.修改操作:    修改操作符为“U.”。在QBE中,关系的主码是不能修改的,如果需要修改某个元组的主码,只能先删除该元组,然后再插入新的主码的元组。  例12  把95001学生的年龄改为18岁。方法(1) :将操作符“U.”放在值上。 Student Sno Sname Ssex Sage Sdept 95001 U. 18 2018年9月20日星期四

72 修改操作(续) 方法(2): 将操作符“U.”放在关系上
Student Sno Sname Ssex Sage Sdept U. 95001 18 2018年9月20日星期四

73 修改操作(续) 例13 把95001学生的年龄增加1岁 (这个修改操作涉及表达式,所以只能将操作符“U.”放在关系上) 。
例14 将计算机系所有学生的年龄增加1岁。 Student Sno Sname Ssex Sage Sdept U. 95001 17 17+1 Student Sno Sname Ssex Sage Sdept U. 95008 18 18+1  CS 2018年9月20日星期四

74 2.插入操作 I. 插入操作符为“I.”。新插入的元组必须具有码值,其它属性为空。
   例15 把信息系女生95701,姓名张三,年龄17岁存入数据库中。 Student Sno Sname Ssex Sage Sdept I. 95701 张三 17 IS 2018年9月20日星期四

75 3. 删除操作 删除操作:删除操作符为“D.”。 D. Sage 例16 删除学生95089。
 例16  删除学生95089。     由于SC关系与Student关系之间具有参照关系,为保证参照完整性,删除95089学生后,还要删除95089学生选修的全部课程。 Student Sno Sname Ssex Sage Sdept D. 95089 SC Sno Cno Grade D. 95089 2018年9月20日星期四

76 2.6小结 本章系统讨论了关系数据库的重要概念,包括关系模型的数据结构、关系的完整性以及关系操作。
   本章系统讨论了关系数据库的重要概念,包括关系模型的数据结构、关系的完整性以及关系操作。     关系数据库系统是重点。这是因为关系数据库系统在目前是使用最广泛的数据库系统。20世纪70年代以后开发的数据库管理系统产品几乎都是基于关系的;数据库领域近30年来的研究工作也主要是关系的。在数据库发展的历史上,最重要的成就即为关系模型。 2018年9月20日星期四

77   2.6小结(续)    关系数据库系统与非关系数据库系统的区别是:关系系统只有“表”这一种数据结构;而非关系数据库系统还有其它数据结构,对这些数据结构有其它的操作。    关系理论的确立标志着关系数据库系统的基础研究已经接近顶峰。关系数据库系统已经占据了数据库的市场。 2018年9月20日星期四


Download ppt "数据库技术 第二章 关系数据库 中国科学技术大学网络学院 阚卫华."

Similar presentations


Ads by Google