万哥的数据库笔记(三)关系操作&运算

2.2 关系操作

2.2.1 基本的关系操作

  1. 查询:选择、投影、连接、除、并、交、差
  2. 数据更新:插入、删除、修改
  3. 查询的表达能力是其中最主要的部分
  4. 选择、投影、并、差、笛卡尔积是5种基本操作

2.4 关系代数

2.4.1 传统的集合运算

传统的集合运算是二目运算,包括并、差、交、笛卡尔积4种运算

并:R∪S={t | t∈R ∨ t∈S}

要有相同列

差:R-S={t | t∈R ∧ t∉S}

交:R∩S={t | t∈R ∧ t∈S}

笛卡尔积:R×S={tr⌒ts | tr∈R ∧ ts∈S}

​ R

ABC
a1b1c1
a1b2c2
a2b2c1

​ S

ABC
a1b2c2
a1b3c2
a2b2c1

​ R×S

R.AR.bR.cS.AS.bS.c
a1b1c1a1b2c2
a1b1c1a1b3c2
a1b1c1a2b2c1
a1b2c2a1b2c2
a1b2c2a1b3c2
a1b2c2a2b2c1
a2b2c1a1b2c2
a2b2c1a1b3c2
a2b2c1a2b2c1

2.4.2 专门的关系运算

专门的关系运算包括选择、投影、连接、除运算等

R:关系

t∈R:t是R的一个元组

t[Ai]:元组t中相应于属性Ai的一个分量

tr⌒ts:元组的连接

象集

x1z1
x1z2
x1z3
x2z2
x2z3
x3z1
x3z3

x1在R中象集:ZX1 = {Z1, Z2, Z3}

x2在R中象集:ZX2 = {Z2, Z3}

x3在R中象集:ZX3 = {Z1, Z3}

选择

F®={t | t ∈ R ∧ F(t) = ‘真’}

F是选择条件,取逻辑值“真”或“假”

F的基本形式 X1θY1

θ可以是>, ≥, <, ≤, =或<>(≠)

举例:

Sdept=‘IS’(Student) 从Student表查询所在系是IS的元组

Sage<20(Student) 从Student表查询年龄小于20的元组

投影

A®={t[A] | t ∈ R}

A为R中的属性列

举例:

Sname,Sdept(Student) 从Student表提取Sname和Sdept两列属性

注意:投影会取消重复元组P53

连接:

R▷◁S={tr⌒ts | tr ∈ R ∧ ts ∈ S ∧ tr[A] θ ts[B]}

AθB

连接分为三部分:普通连接,等值连接,自然连接 直接上图

​ R

ABC
a1b15
a1b26
a2b38
a2b412

​ S

BE
b13
b27
b310
b32
b52

​ R▷◁S(普通连接)

​ C<E

AR.BCS.BE
a1b15b27
a1b15b310
a1b26b27
a1b26b310
a2b38b310

意思是用R的C和S的E作比较,如果C<E的话就把两张表连接在一起,为了区分两个表中的B,用R.B和S.B区分

等值连接:

AR.BCS.BE
a1b15b13
a1b26b27
a2b38b310
a2b38b32

R.B = S.B 时连接

自然连接:

ABCE
a1b153
a1b267
a2b3810
a2b382

去除多余的列

外连接:

ABCE
a1b153
a1b267
a2b3810
a2b382
a2b412NULL
NULLb5NULL2

把匹配不上的用NULL代替

左外连接:去除外连接倒数第一行,保留自己有的(倒数第二行)

右外连接:去除外连接倒数第二行,保留自己有的(倒数第一行)

除运算:

R÷S={tr[X] | tr ∈ R ∧ ∏Y(S)∈YX}

YX为x在R中的象集,x=tr[X]\

找出相同的列,能全除完就符合条件。

​ R

ABC
a1b1c2
a2b3c7
a3b4c6
a1b2c3
a4b6c6
a2b2c3
a1b2c1

Za1={(b1, c2), (b2, c3), (b2, c1)}

Za2={(b3, c7), (b2, c3)}

Za3={(b4, c6)}

Za4={(b6, c6)}

S

BCD
b1c2d1
b2c1d1
b2c3d2

​ R÷S

A
a1

例2.10】查询至少选修1号课程和3号课程的学生号码

​ Student

学号Sno姓名Sname性别Ssex年龄sage所在系sdept
201215121李晨20CS
201215122刘晨19CS
201215123王敏18MA
201215125张立19IS

​ Course

课程号cno课程名cname先行课cpno学分ccredit
1数据库54
2数学2
3信息系统14
4操作系统63
5数据结构74
6数据处理2
7PACAL语言64

​ SC

学号sno课程号cno成绩grade
201215121192
201215121285
201215121388
201215122290
201215122380

根据题意“查询至少选修1号课程和3号课程的学生号码”,建立一个临时关系k:

Cno
1
3

题目求学生号码,也就是Sno;用除运算解决该问题。有SNO又有CNO的查表可得是SC,筛选列的是∏, 答案就出来了:

Sno,Cno(SC) ÷ k

答案是{201215121}

例2.11】查询选修了2号课程的学生的学号

建立一个临时关系k:

CnO
2

解题思路和上一题差不多

Sno,Cno(SC) ÷ k

还有一种解法

Sno(☌Cno=‘2’(SC))

例2.12】查询至少选修了一门其直接先行课为5号课程的学生姓名

看Course表,只有Cpno='5’符合条件。接着看题意,求得是学生姓名,有Sname又有Cpno,没有这种表,所以需要连接。

Sname(☌Cpno=‘5’(Course)▷◁SC▷◁∏Sname,Sno(Student))

例2.13】查询选修了全部课程的学生号码和姓名

Sno,Sname(☌Cno=‘1’∨’2’∨’3’(SC)▷◁Student)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值