西华师范大学计算机学院
数据库系统概论
第二章 关系数据库 (续)
第二章 关系数据库
2.1 关系模型概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 小结
2.4 关系代数
? 概述
? 传统的集合运算
? 专门的关系运算
概述
1,关系代数
2,运算的三要素
3,关系代数运算的三个要素
4,关系代数运算的分类
5,表示记号
概述
1.关系代数
一种抽象的查询语言
用对关系的运算来表达查询
概述 (续 )
2,关系代数运算的三个要素
运算对象:关系
运算结果:关系
运算符:四类
概述 (续 )
– 集合运算符
? 将关系看成元组的集合
? 运算是从关系的, 水平, 方向即行的角度来进行
– 专门的关系运算符
? 不仅涉及行而且涉及列
– 算术比较符
? 辅助专门的关系运算符进行操作
– 逻辑运算符
? 辅助专门的关系运算符进行操作






-

×



广义笛
卡尔积











大于
大于等于
小于
小于等于
等于
不等于
运算符 含义 运算符 含义
表 2.4 关系代数运算符
概述 (续 )
专门的
关系
运算符
σ
π
÷
选择
投影
连接

逻辑运
算符
?





运算符 含义 运算符 含义
表 2.4 关系代数运算符(续)
概述 (续 )
概述 (续 )
4.关系代数运算的分类
传统的集合运算
并, 差, 交, 广义笛卡尔积
专门的关系运算
选择, 投影, 连接, 除
概述 (续 )
5.表示记号
( 1) R,t?R,t[Ai]
设关系模式为 R(A1,A2,…, An)
它的一个关系设为 R。 t?R表示 t是 R的一个元组
t[Ai]则表示元组 t中相应于属性 Ai的一个分量
概述 (续 )
( 2) A,t[A],A
若 A={Ai1,Ai2,…, Aik},其中 Ai1,Ai2,…, Aik是
A1,A2,…, An中的一部分,则 A称为属性列或域列。
t[A]=(t[Ai1],t[Ai2],…, t[Aik])表示元组 t在属性列 A
上诸分量的集合。 A则表示 {A1,A2,…, An}中去掉
{Ai1,Ai2,…, Aik}后剩余的属性组。
概述 (续 )
– ( 3) tr ts
R为 n目关系,S为 m目关系。 tr ?R,ts?S,tr
ts称为元组的连接。它是一个 n + m列的元组,
前 n个分量为 R中的一个 n元组,后 m个分量
为 S中的一个 m元组。
概述 (续 )
– 4) 象集 Zx
给定一个关系 R( X,Z), X和 Z为属性组 。
当 t[X]=x时, x在 R中的 象集 ( Images Set) 为:
Zx={t[Z]|t ?R,t[X]=x}
它表示 R中属性组 X上值为 x的诸元组在 Z上分
量的集合。
2.4 关系代数
? 概述
? 传统的集合运算
? 专门的关系运算
2.4.1 传统的集合运算
? 并
? 差
? 交
? 广义笛卡尔积
1,并( Union)
? R和 S
– 具有相同的目 n( 即两个关系都有 n个属性 )
– 相应的属性取自同一个域
? R∪ S
– 仍为 n目关系, 由属于 R或属于 S的元组组成
R∪ S = { t|t ? R∨ t ?S }
并 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
A B C
a1 b1 c1
a1 b2 c2
a1 b3 c2
a2 b2 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R∪ S
2,差( Difference)
? R和 S
– 具有相同的目 n
– 相应的属性取自同一个域
? R - S
– 仍为 n目关系, 由属于 R而不属于 S的所有元
组组成
R -S = { t|t?R∧ t?S }
差 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1 A B C
a1 b1 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R-S
3,交( Intersection)
? R和 S
– 具有相同的目 n
– 相应的属性取自同一个域
? R∩S
– 仍为 n目关系, 由既属于 R又属于 S的元组组成
R∩S = { t|t ? R∧ t ?S }
R∩S = R –(R-S)
交 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
A B C
a1 b2 c2
a2 b2 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R ∩ S
4,广义笛卡尔积( Extended Cartesian Product)
? R
– n目关系, k1个元组
? S
– m目关系, k2个元组
? R× S
– 列,( n+m) 列的元组的集合
? 元组的前 n列是关系 R的一个元组
? 后 m列是关系 S的一个元组
– 行,k1× k2个元组
? R× S = {tr ts |tr ?R ∧ ts?S }
广义笛卡尔积 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
A B C
a1 b1 c1
a1 b1 c1
a1 b1 c1
a1 b2 c2
a1 b2 c2
a1 b2 c2
a2 b2 c1
a2 b2 c1
a2 b2 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R × S
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
a1 b2 c2
a1 b3 c2
a2 b2 c1
a1 b2 c2
a1 b3 c2
a2 b2 c1
2.4 关系代数
? 概述
? 传统的集合运算
? 专门的关系运算
2.4.2 专门的关系运算
? 选择
? 投影
? 连接
? 除
1,选择( Selection)
? 1) 选择又称为限制 ( Restriction)
? 2) 选择运算符的含义
– 在关系 R中选择满足给定条件的诸元组
σF(R) = {t|t?R∧ F(t)= '真 '}
– F:选择条件, 是一个逻辑表达式, 基本形式为:
[?( ] X1θY1 [ )][φ [?( ] X2θY2 [ )]]…
? θ:比较运算符 ( >, ≥,<, ≤,=或 <>)
? X1,Y1等:属性名, 常量, 简单函数;属性名也可以用它
的序号来代替;
? φ:逻辑运算符 ( ∧ 或 ∨ )
? [ ]:表示任选项
? …,表示上述格式可以重复下去
选择(续)
? 3) 选择运算是从行的角度进行的运算
? 4) 举例
设有一个学生 -课程数据库, 包括学生关系
Student,课程关系 Course和选修关系 SC。
σ
选择(续)
学 号
Sno
姓 名
Sname
性 别
Ssex
年 龄
Sage
所 在

Sdept95001 李勇 男 20 CS
95002 刘晨 女 19 IS
95003 王敏 女 18 MA
95004 张立 男 19 IS
(a)
Student
例 1 例 2 例 4例 3 例 9
选择(续)
(b)
Course
课程号 课程名 先行课 学分
Cno Cname Cpno Ccredit
1 数据库 5 4
2 数学 2
3 信息系统 1 4
4 操作系统 6 3
5 数据结构 7 4
6 数据处理 2
7 PASCAL语言 6 4
例 9
选择(续)
(c)
SC
学 号 课 程 号 成 绩
Sno Cno Grade
95001 1 92
95001 2 85
95001 3 88
95002 2 90
95002 3 80
例 7 例 9
选择(续)
[例 1] 查询信息系 ( IS系 ) 全体学生
σSdept = 'IS' (Student)
或 σ5 ='IS' (Student)
结果:
Sno Sname Ssex Sage Sdept
95002 刘晨 女 19 IS
95004 张立 男 19 IS
选择(续)
[例 2] 查询年龄小于 20岁的学生
σSage < 20(Student)
或 σ4 < 20(Student)
结果:
Sno Sname Ssex Sage Sdept
95002 刘晨 女 19 IS
95003 王敏 女 18 MA
95004 张立 男 19 IS
2,投影( Projection)
? 1) 投影运算符的含义
– 从 R中选择出若干属性列组成新的关系
πA(R) = { t[A] | t ?R }
A,R中的属性列
2,投影( Projection)
? 2) 投影操作主要是从列的角度进行运算
– 但投影之后不仅取消了原关系中的某些列,
而且还可能取消某些元组 ( 避免重复行 )
π
投影(续)
? 3) 举例
[例 3] 查询学生的姓名和所在系
即求 Student关系上学生姓名和所在系两个属
性上的投影
πSname,Sdept(Student)
或 π2,5(Student)
结果:
投影(续)
Sname Sdept
李勇 CS
刘晨 IS
王敏 MA
张立 IS
投影(续)
[例 4] 查询学生关系 Student中都有哪些系
πSdept(Student)
结果,Sdept
CS
IS
MA
3,连接( Join)
? 1) 连接也称为 θ连接
? 2) 连接运算的含义
– 从两个关系的笛卡尔积中选取属性间满足一定条件
的元组
R S = { | tr? R∧ ts?S∧ tr[A]θts[B] }
? A和 B,分别为 R和 S上度数相等且可比的属性组
? θ:比较运算符
– 连接运算从 R和 S的广义笛卡尔积 R× S中选取( R关
系)在 A属性组上的值与( S关系)在 B属性组上值
满足比较关系的元组。
Aθ tr ts
连接 (续 )
? 3)两类常用连接运算
– 等值连接( equijoin)
? 什么是等值连接
–θ为“=”的连接运算称为等值连接
? 等值连接的含义
– 从关系 R与 S的广义笛卡尔积中选取 A,B属性
值相等的那些元组, 即等值连接为:
R S = { | tr?R∧ ts ?S∧ tr[A] = ts[B] } A=B tr ts
连接 (续 )
– 自然连接 ( Natural join)
? 什么是自然连接
– 自然连接是一种特殊的等值连接
?两个关系中进行比较的分量必须是相同
的属性组
?在结果中把重复的属性列去掉
? 自然连接的含义
R和 S具有相同的属性组 B
R S = { | tr ?R∧ ts ?S∧ tr[B] = ts[B] } tr ts
连接 (续 )
? 4) 一般的连接操作是从行的角度进行运
算 。
自然连接还需要取消重复列,所以是
同时从行和列的角度进行运算。
AθB
R
S
连接 (续 )
? 5)举例
[例 5]
A B C
a1 b1 5
a1 b2 6
a2 b3 8
a2 b4 12
B E
b1 3
b2 7
b3 10
b3 2
b5 2
R S
连接 (续 )
R S
A R.B C S.B E
a1 b1 5 b2 7
a1 b1 5 b3 10
a1 b2 6 b2 7
a1 b2 6 b3 10
a2 b3 8 b3 10
C< E
连接 (续 )
等值连接 R S
R.B=S.B
A R.B C S.B E
a1 b1 5 b1 3
a1 b2 6 b2 7
a2 b3 8 b3 10
a2 b3 8 b3 2
连接 (续 )
自然连接 R S
A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
4)象集 Z
给定一个关系 R( X,Z), X和 Z为属性组 。 当
t[X]=x时, x在 R中的 象集 ( Images Set) 为:
Zx={t[Z]|t ?R,t[X]=x}
它表示 R中属性组 X上值为 x的诸元组在 Z上分量
的集合。
4)象集 Z
A B C
a1 b1 c2
a2 b3 c7
a3 b4 c6
a1 b2 c3
a4 b6 c6
a2 b2 c3
a1 b2 c1
B C D
b1 c2 d1
b2 c1 d1
b2 c3 d2
R÷ S
A
a1
R
S
4,除( Division)
给定关系 R (X,Y) 和 S (Y,Z),其中 X,Y,Z为属性组 。
R中的 Y与 S中的 Y可以有不同的属性名, 但必须出自相同
的域集 。 R与 S的除运算得到一个新的关系 P(X),P是 R中
满足下列条件的元组在 X属性列上的投影:元组在 X上分
量值 x的象集 Yx包含 S在 Y上投影的集合 。
R÷ S = {tr [X] | tr? R∧ πY (S) ? Yx }
Yx,x在 R中的象集, x = tr[X]
除 (续 )
? 2) 除操作是同时从行和列角度进行运算
? 3) 举例
[例 6] (p62)
÷
R
S
除 (续 )
? 在除运算中,若被除关系为 m元关系,除关系为 n元关
系,则运算结果为一个 m-n元关系。在进行除运算时,
先将被除关系中的 m-n列按值的不同分成若干组,然后
检查每个组,看 m-n列以外的那些列中是否包含除关系
的全部元组,包含则取该 m-n列的值作为商关系的一个
元组,否则不取。
? 通常,作为除关系中的属性都在被除关系中有对应的
属性。所谓对应属性是指它们可以取不同的名称,但
值域相同。

R S
A B C D C D
a b c d c d
a b e f e f
b c e f
e d c d
e d e f
a b d e
计算,R ÷ S
R ÷ S
A B
a b
e d
除 (续 )
A B C
a1 b1 c2
a2 b3 c7
a3 b4 c6
a1 b2 c3
a4 b6 c6
a2 b2 c3
a1 b2 c1
B C D
b1 c2 d1
b2 c1 d1
b2 c3 d2
R÷ S
A
a1
R
S
分析:
在关系 R中, A可以取四个值 {a1,a2,a3,a4}
a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}
a2的象集为 {(b3,c7),(b2,c3)}
a3的象集为 {(b4,c6)}
a4的象集为 {(b6,c6)}
S在 (B,C)上的投影为
{(b1,c2),(b2,c1),(b2,c3) }
只有 a1的象集包含了 S在 (B,C)属性组上的投影
所以 R÷ S ={a1}
5.综合举例
以学生 -课程数据库为例 (P.59)
[例 7] 查询至少选修 1号课程和 3号课程的学生号码
首先建立一个临时关系 K:
然后求,πSno.Cno(SC)÷ K
Cno
1
3
综合举例 (续 )
? 例 7续 πSno.Cno(SC)
95001象集 {1,2,3}
95002象集 {2,3}
πCno(K)={1,3}
于是,πSno.Cno(SC)÷ K={95001}
Sno Cno
95001 1
95001 2
95001 3
95002 2
95002 3
综合举例 (续 )
[例 8] 查询选修了 2号课程的学生的学号 。
πSno( σCno='2'( SC))
= { 95001,95002}
综合举例 (续 )
[例 9] 查询至少选修了一门其直接先行课为 5号课
程的课程的学生姓名 。
πSname(σCpno='5'(Course SC Student))

πSname(σCpno='5'(Course) SC πSno,Sname(Student))

πSname (πSno (σCpno='5' (Course) SC) πSno,Sname (Student))
综合举例 (续 )
[例 10] 查询选修了全部课程的学生号码和姓名 。
πSno,Cno( SC) ÷ πCno( Course) πSno,Sname( Student)
第二章 关系数据库
2.1 关系模型概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 小结
2.5 关系演算
? 关系演算
以数理 逻辑 中的谓词演算为基础
? 种类:按谓词变元不同分类
1.元组关系演算:
以 元组变量 作为谓词变元的基本对象
元组关系演算语言 ALPHA
2.域关系演算:
以 域变量 作为谓词变元的基本对象
域关系演算语言 QBE
2.5.1 元组关系演算语言 ALPHA
? 由 E.F.Codd提出
INGRES所用的 QUEL语言是参照 ALPHA语言研制的
? 语句
检索语句
? GET
更新语句
? PUT,HOLD,UPDATE,DELETE,DROP
一、检索操作
? 语句格式:
GET 工作空间名 [( 定额 ) ]( 表达式 1)
[,操作条件 ] [DOWN/UP 表达式 2]
定额:规定检索的元组个数
? 格式,数字
表达式 1:指定语句的操作对象
? 格式:
关系名 | 关系名, 属性名 | 元组变量, 属性名 | 集函数 [,… ]
操作条件:将操作结果限定在满足条件的元组中
? 格式,逻辑表达式
表达式 2:指定排序方式
? 格式,关系名, 属性名 | 元组变量, 属性名 [,… ]
检索操作 (续 )
(1) 简单检索 (即不带条件的检索 )
(2) 限定的检索 (即带条件的检索 )
(3) 带排序的检索
(4) 带定额的检索
(5) 用元组变量的检索
(6) 用存在量词的检索
检索操作 (续 )
(7) 带有多个关系的表达式的检索
(8) 用全称量词的检索
(9) 用两种量词的检索
(10) 用蕴函 ( Implication) 的检索
(11) 集函数
( 1)简单检索
GET 工作空间名 ( 表达式 1)
[例 1] 查询所有被选修的课程号码 。
GET W (SC.Cno)
[例 2] 查询所有学生的数据 。
GET W (Student)
( 2)限定的检索
格式
GET 工作空间名 ( 表达式 1), 操作条件
[例 3] 查询信息系 (IS)中年龄小于 20岁的学生
的学号和年龄 。
GET W (Student.Sno, Student.Sage):
Student.Sdept='IS'∧ Student.Sage<20
( 3)带排序的检索
格式
GET 工作空间名 ( 表达式 1) [,操作条件 ]
DOWN/UP 表达式 2
[例 4] 查询计算机科学系 (CS)学生的学号, 年龄, 结
果按年龄降序排序 。
GET W (Student.Sno,Student.Sage):
Student.Sdept='CS‘ DOWN Student.Sage
( 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
( 5)用 元组变量 的检索
? 元组变量的含义
– 表示可以在某一关系范围内变化 ( 也称为范围变量
Range Variable)
? 元组变量的用途
– ① 简化关系名:设一个较短名字的元组变量来代替较
长的关系名 。
– ② 操作条件中使用 量词 时 必须 用元组变量 。
? 定义元组变量
– 格式,RANGE 关系名 变量名
– 一个关系可以设多个元组变量
(6) 用 存在量词 的检索
[例 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')
用存在量词的检索 (续 )
[例 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')
( 7)带有多个关系的表达式的检索
[例 11] 查询成绩为 90分以上的学生名字与课程名字 。
RANGE SC SCX
GET W(Student.Sname,Course.Cname):
?SCX (SCX.Grade≥90∧
SCX.Sno=Student.Sno∧
Course.Cno=SCX.Cno)
( 8)用全称量词的检索
[例 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')
?
( 9)用两种量词的检索
[例 13] 查询选修了全部课程的学生姓名 。
RANGE Course CX
SC SCX
GET W (Student.Sname),CX?SCX
(SCX.Sno=Student.Sno∧
SCX.Cno=CX.Cno)
?
( 10)用蕴函( Implication)的检索
[例 14] 查询最少选修了 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))
?
( 11)集函数
常用集函数( Aggregation function)或内
部函数( Build-in function)
函 数 名 功 能
COUNT 对元组计数
TOTAL 求 总 和
MAX 求最大值
MIN 求最小值
AVG 求平均值
集函数 (续 )
[例 15] 查询学生所在系的数目 。
GET W ( COUNT(Student.Sdept) )
COUNT函数在计数时会自动排除重复值 。
[例 16] 查询信息系学生的平均年龄
GET W (AVG(Student.Sage),
Student.Sdept='IS’ )
二、更新操作
(1) 修改操作
(2) 插入操作
(3) 删除操作
( 1)修改操作 步骤
① 用 HOLD语句将要修改的元组从数据库中读到工作空
间中
HOLD 工作空间名 ( 表达式 1) [,操作条件 ]
HOLD语句是带上并发控制的 GET语句
② 用宿主语言修改工作空间中元组的属性
③ 用 UPDATE语句将修改后的元组送回数据库中
UPDATE 工作空间名
修改操作 (续 )
[例 17] 把 95007学生从计算机科学系转到信息系 。
HOLD W (Student.Sno,Student.Sdetp):
Student.Sno='95007'
( 从 Student关系中读出 95007学生的数据 )
MOVE 'IS' TO W.Sdept
( 用宿主语言进行修改 )
UPDATE W
( 把修改后的元组送回 Student关系 )
( 2)插入操作
步骤
① 用宿主语言在工作空间中建立新元组
② 用 PUT语句把该元组存入指定关系中
PUT 工作空间名 ( 关系名 )
PUT语句只对一个关系操作
插入操作 (续 )
[例 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)
( 3)删除操作
① 用 HOLD语句把要删除的元组从数据库中读
到工作空间中
② 用 DELETE语句删除该元组
DELETE 工作空间名
删除操作 (续 )
[例 19] 95110学生因故退学, 删除该学生元组 。
HOLD W (Student),Student.Sno='95110'
DELETE W
删除操作 (续 )
[例 20] 将学号 95001改为 95102。
HOLD W (Student),Student.Sno='95001'
DELETE W
MOVE '95102' TO W.Sno
MOVE '李勇 ' TO W.Sname
MOVE '男 ' O W.Ssex
MOVE '20' TO W.Sage
MOVE 'CS' TO W.Sdept
PUT W (Student)
删除操作 (续 )
[例 21] 删除全部学生 。
HOLD W (SC)
DELETE W
HOLD W (Student)
DELETE W
在删除操作中保持参照完整性
小结:元组关系演算语言 ALPHA
? 检索操作 GET
GET 工作空间名 [( 定额 ) ]( 表达式 1)
[,操作条件 ] [DOWN/UP 表达式 2]
? 插入操作
– 建立新元组 --PUT
? 修改操作
– HOLD--修改 --UPDATE
? 删除操作
– HOLD--DELETE
2.5 关 系 演 算
? 2.5.1 元组关系演算语言 ALPHA
? 2.5.2 域关系演算语言 QBE
2.5.2 域关系演算语言 QBE
l一种典型的域关系演算 语言
– 由 M.M.Zloof提出
– 1978年在 IBM370上得以实现
– QBE也指 此关系数据库管理 系统
l QBE,Query By Example
– 基于屏幕表格的查询语言
– 查询要求:以填写表格的方式构造查询
– 用示例元素 (域变量 )来表示查询结果可能的情况
– 查询结果:以表格形式显示
QBE操作框架
关系名 属性名
操作命令 元组属性值或查询条件或操作命令
一、检索操作
( 1) 用户提出要求;
( 2) 屏幕显示空白表格;
( 3) 用户在最左边一栏输入要查询的关系名,
例如 Student;
Student
检索操作(续)
( 4)系统显示该关系的属性名
( 5)用户在上面构造查询要求
Student Sno Sname Ssex Sage Sdept
P,T AO,C
Student Sno Sname Ssex Sage Sdept
检索操作(续)
( 6)屏幕显示查询结果
Student Sno Sname Ssex Sage Sdept
李勇
张立
C
构造查询的几个要素
? 示例元素 即域变量 一定要加下划线
示例元素是这个域中可能的一个值, 它不必是
查询结果中的元素
? 打印操作符 P,指定查询结果所含属性列
? 查询条件 不用加下划线
可使用比较运算符>,≥,<,≤,=和 ≠
其中=可以省略
? 排序要求
1,简单查询
[例 1] 查询全体学生的全部数据 。
Student Sno Sname Ssex Sage Sdept
P.95001 P,李勇 P.男 P.20 P.CS
简单查询(续)
显示全部数据也可以简单地把 P.操作符作
用在关系名上 。
Student Sno Sname Ssex Sage Sdept
P.
2,条件查询
(1) 简单条件
[例 2] 求信息系全体学生的姓名 。
Student Sno Sname Ssex Sage Sdept
P,李勇 IS
条件查询(续)
[例 3] 求年龄大于 19岁的学生的学号 。
Student Sno Sname Ssex Sage Sdept
P.95001 >19
条件查询(与条件)
[例 4] 求计算机科学系年龄大于 19岁的学生
的学号 。
方法 ( 1),把两个条件写在同一行上
Student Sno Sname Ssex Sage Sdept
P.95001 >19 CS
条件查询(续)
方法 ( 2),把两个条件写在不同行上, 但使
用相同的示例元素值
Student Sno Sname Ssex Sage Sdept
P.95001
P.95001 >19
CS
条件查询(续)
[例 5] 查询既选修了 1号课程又选修了 2号课程
的学生的学号 。
SC Sno Cno Grade
P.95001
P.95001
1
2
条件查询(续)
[例 6] 查询计算机科学系或者年龄大于 19岁的
学生的学号 。
Student Sno Sname Ssex Sage Sdept
P.95001
P.95002 >19
CS
多表连接
[例 7] 查询选修 1号课程的学生姓名 。
注意:示例元素 Sno是连接属性,其值在两个表中要 相
同 。
SC Sno Cno Grade
95001 1
Student Sno Sname Ssex Sage Sdept
95001 P.李勇
条件查询(非条件)
[例 8] 查询未选修 1号课程的学生姓名
思路:显示学号为 95001的学生名字, 而该学生选修 1号
课程的情况为假
SC Sno Cno Grade
95001 1?
Student Sno Sname Ssex Sage Sdept
95001 P.李勇
条件查询(续)
[例 9] 查询有两个人以上选修的课程号
思路:查询这样的课程 1,它不仅被 95001选修
而且也被另一个学生 ( ?95001) 选修了
SC Sno Cno Grade
95001
?.95001
P.1
1
3,集函数
常用集函数:
函 数 名 功 能
CNT 对元组计数
SUM 求 总 和
AVG 求平均值
MAX 求最大值
MIN 求最小值
集函数(续)
[例 10] 查询信息系学生的平均年龄 。
Student Sno Sname Ssex Sage Sdept
P.AVG.ALL,IS
4.对查询结果排序 (续)
[例 11] 查全体男生的姓名, 要求查询结果
按所在系升序排序, 对相同系的学生按
年龄降序排序 。
Student Sno Sname Ssex Sage Sdept
P.李勇 男 DO( 2), AO( 1),
二、修改操作
[例 12] 把 95001学生的年龄改为 18岁 。
方法 (1),将操作符, U.”放在值上
Student Sno Sname Ssex Sage Sdept
95001 U,18
修改操作 (续 )
方法 (2),将操作符, U.”放在关系上
码 95001标明要修改的元组 。, U.”标明所在的行是
修改后的新值 。
由于主码是不能修改的, 所以系统不会混淆要修改
的属性 。
Student Sno Sname Ssex Sage Sdept
U,95001 18
修改操作 (续 )
[例 13]将计算机系所有学生的年龄都改为 18岁
Student Sno Sname Ssex Sage Sdept
95008 U.18 CS
修改操作 (续 )
[例 14] 把 95001学生的年龄增加 1岁
分两行分别表示改前和改后的示例元素
必须将操作符,U.”放在关系上
Student Sno Sname Ssex Sage Sdept
U.
95001
95001
17
17+1
修改操作 (续 )
[例 15] 将计算机系所有学生的年龄都增加 1岁
Student Sno Sname Ssex Sage Sdept
U.
95008
95008
18
18+1
CS
2.插入操作
[例 16] 把信息系女生 95701,姓名张三, 年龄 17
岁存入数据库中 。
Student Sno Sname Ssex Sage Sdept
I,95701 张三 女 17 IS
3,删除操作
[例 17] 删除学生 95089
为保证参照完整性, 删除 95089学生前, 先删除 95089学
生选修的全部课程
Student Sno Sname Ssex Sage Sdept
D,95089
SC Sno Cno Grade
D,95089