数据库关系代数除法讲解
- 格式:doc
- 大小:82.00 KB
- 文档页数:4
关系代数关系代数是关系数据库系统查询语言的理论基础。
关系代数的9种操作:并、交、差、乘、选择、投影、联接、除、自然联接运算。
五个基本操作:选择(π) 并(∪) 差(-) 笛卡尔积(×)投影(σ) 选择四个组合操作:交(∩) 联接(等值联接)自然联接(RS) 除法(÷) 关系代数表达式:由关系代数运算经有限次复合而成的式子称为关系代数表达式。
这种表达式的运算结果仍然是一个关系。
可以用关系代数表达式表示对数据库的查询和更新操作。
关系代数(演算)要求掌握各种语句的应用,多做书中的例题可以帮助自己熟能生巧。
关系代数表达式举例用关系代数表示数据查询的典型例子[例]设教学数据库中有3个关系:学生关系S(SNO,SNAME,AGE,SEX) 学习关系SC(SNO,CNO,GRADE) 课程关系C(CNO,CNAME,TEACHER) 下面用关系代数表达式表达每个查询语句。
(1) 检索学习课程号为C2的学生学号与成绩。
πSNO,GRADE(σCNO='C2'(SC)) (2) 检索学习课程号为C2的学生学号与姓名πSNO,SNAME(σCNO='C2'(SSC)) 由于这个查询涉及到两个关系S和SC,因此先对这两个关系进行自然连接,同一位学生的有关的信息,然后再执行选择投影操作。
此查询亦可等价地写成:πSNO,SNAME(S)(πSNO(σCNO='C2'(SC)))这个表达式中自然连接的右分量为"学了C2课的学生学号的集合"。
这个表达式比前一个表达式优化,执行起来要省时间,省空间。
(3)检索选修课程名为MATHS的学生学号与姓名。
πSNO,SANME(σCNAME='MATHS'(SSCC)) (4)检索选修课程号为C2或C4的学生学号。
πSNO(σCNO='C2'∨CNO='C4'(SC)) (5)检索至少选修课程号为C2或C4的学生学号。
“数据库原理”课程中关系代数的重难点分析作者:何冬黎吴璟莉邓剑锋来源:《无线互联科技》2019年第01期摘要:“数据库原理”课程是广西师范大学计算机科学与信息工程学院计算机专业及信息管理专业本科生的必修课,关系代数中的“除”运算是该课程的一个重难点。
文章结合笔者多年的教学研究和实践,对关系代数“除”运算的教学进行了探讨,希望能够有益于该课程教学的研究。
关键词:“数据库原理”课程教学;关系代数;“除”运算;包含广西师范大学计算机科学与信息工程学院在学生大二时会开设必修课程—“数据库原理”。
课程目标是使学生掌握数据库技术相关概念、理论和方法,并具有一定的数据库系统设计能力,为下面开发数据库应用系统打下良好的基础[1]。
课程的用书是中国人民大学王珊[2]老师的国家精品课程团队编写的教材—《数据库系统概论》,高等教育出版社出版,已经到了第5版。
教材比较简洁,比如在讲解“除”运算时,首先讲了“除”运算的定义,然后给了3个“除”运算的例题就结束了。
这个台阶跨度太大,很多学生不好理解,表现为“除”运算的题目做不出。
为了让学生上得去,好理解,老师的作用就是在中间多加几级台阶。
笔者加的第1级台阶是:讲解“除”运算的由来及用处,引发学生学习兴趣;第2级台阶:将“除”运算题目分成两类,分别讲解解决方法,对症下药;第3级台阶:及时总结,并对学生的易错点进行错误原因讲解,鼓励学生学好这个重难点。
以下为具体的授课过程。
1 关系代数中“除”运算的由来及用处探讨,引发学生学习兴趣由一道除法题引出思考:9÷2=4…1是什么意思?商等于4,表示被除数9里面包含有4个除数2。
还剩下1没有完全包含一个2,只包含了部分,所以1是余数。
即“除”有包含(覆盖)的意思。
总结推广到二维表(关系)做“除”运算,是在二维上实现包含(覆蓋)的含义。
即在一个大表中找包含(覆盖)了一个小表的运算。
为了好让学生理解,补充以下例子。
补充例子(“除”运算的实际应用)如下:我们有选修情况表SCG表(见表1),包括姓名、性别、课程名称、院系、成绩属性,若想查询有哪些同学的离散数学课程得了优且数据结构课程也是优?即,谁的选修情况包含(覆盖)了以下的CG表(见表2),这时就需要用到除法:SCG÷CG。
数据库的关系运算数据库的关系运算是指对关系型数据库中的关系进行操作和处理的一种方式。
关系运算包括集合运算和关系运算两大类,通过这些运算可以对数据库中的数据进行查询、插入、更新和删除等操作,实现数据的管理和处理。
一、集合运算1. 并运算:并运算是指将两个关系中的元组合并成一个新的关系。
并运算使用符号"∪"表示,它的结果是两个关系中所有元组的集合。
例如,有关系R和S,R={a, b, c},S={c, d, e},则R∪S={a, b, c, d, e}。
2. 交运算:交运算是指找出两个关系中共有的元组,形成一个新的关系。
交运算使用符号"∩"表示,它的结果是两个关系中共有元组的集合。
例如,有关系R和S,R={a, b, c},S={c, d, e},则R∩S={c}。
3. 差运算:差运算是指从一个关系中删除另一个关系中的所有元组,形成一个新的关系。
差运算使用符号"-"表示,它的结果是从第一个关系中去除与第二个关系中相同元组后的集合。
例如,有关系R和S,R={a, b, c},S={c, d, e},则R-S={a, b}。
4. 笛卡尔积运算:笛卡尔积运算是指将两个关系中的元组按照所有可能的组合方式进行组合,形成一个新的关系。
笛卡尔积运算使用符号"×"表示,它的结果是两个关系中元组的所有组合。
例如,有关系R和S,R={a, b},S={c, d},则R×S={(a, c), (a, d), (b, c), (b, d)}。
二、关系运算1. 选择运算:选择运算是指从一个关系中选择满足指定条件的元组,形成一个新的关系。
选择运算使用符号"σ"表示,它的结果是满足条件的元组的集合。
例如,有关系R,R={a, b, c},选择条件为a=b,则σ(a=b)(R)={a, b}。
2. 投影运算:投影运算是指从一个关系中选择指定的属性,形成一个新的关系。
数据库关系代数:是一种抽象的查询语言,用对关系的运算来表达查询。
关系代数运算的是关系,运算结果亦是关系。
关系代数的基本关系包括:并、交、差、笛卡尔积、选择、投影、连接、除法运算。
由于并、交、差运算很简单,这里不再赘述,只说明了几个容易遗忘和混淆的运算。
1、笛卡尔积
计算两个关系R和S的笛卡尔积,R的元数为r,S的元数为s,则R×S是一个(r+s)元的元组集合
2、选择
选择是根据某些条件对关系做水平切割
3、投影π
投影与选择正好相反,是对关系的一种垂直切割,消去某列,并重新安排列的顺序。
投影用(π)表示。
4、连接
连接运算:从两个关系的笛卡尔积中选取属性间满足一定条件的元组,用(R ⋈S)表示,连接分为两种,一种是等值连接(有的书上写的是连接),另一种是自然连接。
等值连接:条件AθB中的θ为‘=’的连接;自然连接:关系R与S选取A、B属性值相等的那些元组。
自然连接:一般自然连接使用在R和S有公共属性时,如果没有公共属性,自然连接就转为笛卡尔积操作。
5、除法
经过总结之后,发现其实关系之间的运算并不难,关键在于要认
真分析,将符号与我们的实际找到联系,只有对各种符号印象深刻之后,这些关系之间的运算也就变得很简单。
在平时要多找联系多总结,方是正道。
数据库关系代数表达式关系代数是关系数据库系统查询语言的理论基础。
很有必要学习一下,有些是用代数表达式很方便的东西,用SQL写出来还是挺麻烦的,并不是想象当中那么直接。
一、关系代数的9种操作:关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。
•五个基本操作:并(∪)、差(-)、笛卡尔积(×)、投影(σ)[Where]、选择(π)[Select]四个组合操作:交(∩)、联接(等值联接):等值连接表示(1)先做笛卡尔积(×)之后,(2)对相应列进行选择或等值关联后的结果(仅筛选行、不筛选列)(仅筛选行、不筛选列):即只作用于行上不作用于列上。
如例子:(σ1=4∧2='C2’∧5=‘C4’(SC×SC)) 1.先(SC×SC)2.作用于列σ1=4∧2='C2’∧5=‘C4’自然联接(RcrossS):自然连接表示两个关系中若有相同名称的属性(列),则自动作为关联条件,且仅列出一列。
如例子:(σCNO=‘C2’(ScrossSC))中的(ScrossSC)除法(÷)通过下面的例子可以看出,(ScrossSCcrossC)(RcrossS),这样的写法,说明默认肯定了cross的定义为连接表有相同名称的属性(即列)π列(σ(条件)(from后面的表))∨[or]π 1(σ1=4∧2='C2'∧5='C4'(SC×SC))π SNO(σ CNO='C2'∨CNO='C4'(SC))二、关系代数表达式:由关系代数运算经有限次复合而成的式子称为关系代数表达式。
这种表达式的运算结果仍然是一个关系。
可以用关系代数表达式表示对数据库的查询和更新操作。
三、举例说明:设教学数据库中有3个关系:学生关系S(SNO,SNAME,AGE,SEX)学习关系SC(SNO,CNO,GRADE)课程关系C(CNO,CNAME,TEACHER)(1) 检索学习课程号为C2的学生学号与成绩SELECT SNO,GRADEFROM SC WHERE CNO=‘C2’π SNO,GRADE(σCNO='C2'(SC))(2) 检索学习课程号为C2的学生学号与姓名SELECT SC.SNO,S.SNAMEFROM SC,SWHERE SC.SNO=S.SNOAND O=‘C2’π SNO,SNAME(σCNO='C2'(ScrossSC))此查询涉及S和SC,先进行自然连接,然后再执行选择投影操作。
关系代数表达式总结一、并例1 求选修了课程号为1或2的课程的学生学号。
分析:可以先求出选修了课程号为1的课程的学生学号,再求出选修了课程号为2的课程的学生学号,最后使用并运算的方法求出选修课程号为1或2的课程的学生学号.本例也可以使用或条件来表示。
πSno(σCno=’1’(SC))∪πSno(σCno='2’(SC))或πSno(σCno=’1'∨ Cno='2’(SC))二、交例2 检索至少选修课程号为2和3的课程的学生学号。
分析:方法一:只涉及到一个表,但不能直接用∧(为什么?)特别注意,本例不能写为:πSno(σCno=’2’∧ Cno=’3’(SC))因为选择运算为行运算,在同一行中Cno不可能既为2,又为3。
第一步:转换(SC×SC)笛卡尔积将垂直的条件展开为水平的条件。
SC1 SC2选修课程号为2和3的学生:σ1=4∧2=’2’∧ 5=’3’(SC×SC)最后取出学生的学号:π1(σ1=4∧2=’2'∧ 5=’3'(SC×SC))方法二:πSno(σCno=’2’(SC))∩πSno(σCno=’3’(SC))三、差例3 将学生信息(‘95001’,’李勇’,‘男’,20,‘CS’)从Student表删除。
分析:可以将这行数据看成由一个元组构成的表,将Student表与该表进行差运算。
因此,该删除操作可表示为:Student-{‘95001’,’李勇',‘男’,20,‘CS’}注意:但是当查询涉及到否定或全部值时,上述形式就不能表达了,就要用到差操作或除操作。
例4 求没有选修课程号为2的课程的学生学号。
分析:可以认为是在全部学号中去掉选修课程号为2的课程的学生学号,就得出没有选修课程号为2的学生学号。
由于在并、交、差运算中,参加运算的关系要求是兼容的,故应当先投影,再进行差运算。
πSno(Student)—πSno(σCno=’2’(SC))特别注意,本题不能写为:πSno(σCno≠’2’(SC))。
关系代数的除运算
关系代数是数据库领域中的一种基本理论,它用来描述数据之间的关系和操作。
除运算是关系代数中的一种运算,它用来求两个关系的差集,并返回差集结果关系。
具体来说,如果有两个关系A和B,它们具有相同的属性集合,即A和B的每个属性都是相同的。
则A除去B的运算定义如下:
A -
B = { t | t ∈ A ∧ t B}
其中,t是A和B中的元组,∈表示属于,∧表示逻辑与,表示不属于,即t属于A但不属于B。
例如,如果有两个关系R和S,其中R包含属性A、B、C,S包含属性B、C、D,则R除去S的结果为:
R - S = { (a, b, c) | (a, b, c) ∈ R ∧ (b, c, d) S } 其中,(a, b, c)是R中的一个元组,(b, c, d)是S中的一个元组,∈表示属于,∧表示逻辑与,表示不属于,即(a, b, c)属于R 但(b, c, d)不属于S。
除运算常常与其他关系代数运算一起使用,例如交、并、选择、投影等,来实现复杂的查询和操作。
在实际应用中,除运算也具有重要的应用价值,例如在数据清洗、数据集成、信息抽取等领域中都有广泛的应用。
- 1 -。
【数据库原理】关系代数篇——除法讲解
陈宇超编辑总结: 除法运算的一般形式示意图
如何计算R÷S呢,首先我们引进”象集”的概念,具体意义看下面的陈述即可理解
关系R和关系S拥有共同的属性B、C , R÷S得到的属性值就是关系R包含而关系S不包含的属性,即A属性
在R关系中A属性的值可以取{ a1,a2,a3,a4 }
a1值对应的象集为{ (b1,c2) , (b2,c1) , (b2,c3) }
a2值对应的象集为{ (b3,c7) , (b2,c3) }
a3值对应的象集为{ (b4,c6) }
a4值对应的象集为{ (b6,c6) }
关系S在B、C上的投影为{ (b1,c2) , (b2,c1) , (b2,c3) }
只有a1值对应的象集包含关系S的投影集,所以只有a1应该包含在A属性中为
【例题一】为了更好的理解除法的实际作用,请看下面的例题
设有教学数据库有3个关系(以下四小问均用除法的思想解决)
学生信息关系student(sno,sname,age,sex)
学生选课关系sc(sno,cno,score)
学校课程关系course(cno,cname)
SQL语言中没有全称量词,具体实现时可以把带有全称量词的谓词转换为等价的带有存在量词的谓词。
解决这类的除法问题一般采用双嵌套not exists
解决所谓forall的问题。
(1)检索所学课程包含了C002课程的学生学号
解关系代数表达式:∏sno ( sc÷∏cno(σcno=’C002’ (course) )
Sql语句
从略
(2)求至少选择了C001和C003两门课程的学生学号
解关系代数表达式:∏sno ( sc÷∏cno(σcno=’C001’ or cno=’C003’(course) )
Sql语句
select distinct sno from sc A where not exists
(
select*from course B where cno in('C002','C003')and
not exists
(
select*from sc C where A.sno=C.sno and o=o )
)
也可以采用自连接
select s1.sno
from (select*from sc where cno='C001')as s1, (select*from sc where cno='C003')as s2
where s1.sno=s2.sno
(3)求至少学习了学生S003所学课程的学生学号
解关系代数表达式:∏sno ( sc÷∏cno(σsno=’S003’ (sc) )
select distinct sno from sc A where not exists
(
select*from sc B where sno='S003'and not exists (
select*from sc C where A.sno=C.sno and o=o )
)
(4)求选择了全部课程的学生的学号
解此例的等价自然语义是,输出这样的学号,不存在某门课程在他的选课记录里没有选这门课
关系代数表达式:∏sno (sc÷∏cno(course) )
Sql语句
select distinct sno from sc A where not exists (
select cno from course B where not exists
(
select*from sc C where C.sno=A.sno and
o=o
)
)
(5)求选择了全部课程的学生的学号和姓名
解关系代数表达式:∏sno,sname((student∞sc)÷∏cno(course) )
Sql语句
select sno,sname from student A where not exists
(
select cno from course B where not exists
(
select*from sc C where C.sno=A.sno and
o=o
)
)
以上小问用group by结合count语句也是可以实现的,也更好理解一些。
例如
求选择了全部课程的学生学号
SELECT sno FROM (SELECT COUNT(*)cnt,Sno
FROM SC
GROUP BY sno)T
WHERE cnt>=(SELECT COUNT(Cno)
FROM COURSE)
求至少选择了C002和C003两门课程的学生学号
select sno from sc where cno in('C002','C003')group by sno having COUNT(cno)=2
但该方法对于一个学生多次选修一门课程的情况无法处理,需要对其中的 SC 关系用distinct进行一定预处理,所以group by +count有一定的局限性。