针对书上的学生选课数据库S_T,用关系代数和SQL语言完成以下查询:
1、查询“CS”系所有学生的学号和姓名。
2、Slelect sno,sname from student where sdept =’CS’
3、查询所有姓“刘”的学生的信息。
4、Select * from student where sname like ‘刘%’
5、查询年龄在18至20岁之间的学生信息。
6、Select * from student where sage between 18 and 20
7、查询不在“CS”系也不在“MA”系的学生的所有信息。
8、Select * from student where sdept not in (‘CS’,’MA’)
9、查询“CS”系所有学生的平均年龄。
10、Select avg(sage) from student where sdept like ‘CS’
11、查询课程名是以“系统”结尾的课程信息。
12、Select * from course where cname like ‘%系统’
13、查询先行课为“6”号课程的课程信息。
14、Select * from course where cpno=6
15、查询间接先行课为“5”号课程的课程号及课程名。
16、Select https://www.wendangku.net/doc/4211421974.html,o,https://www.wendangku.net/doc/4211421974.html,ame from c c1,c c2 where c1.cpno=https://www.wendangku.net/doc/4211421974.html,o and c2.cpno=5
17、Select cno ,cname from course where cpno in (select cno from course where
cpno=5)
18、查询没有先行课的课程名。
19、Select cname from course where cpno is null
20、查询选修了“1”号课程的学生选课信息。
21、Select * from sc where cno=1
22、查询成绩为90分以上的学生姓名和课程名。
23、Select sname ,cname from s,c,sc where s.sno=sc.sno and https://www.wendangku.net/doc/4211421974.html,o=https://www.wendangku.net/doc/4211421974.html,o and
grade>=90
24、查询被选修了的课程号及课程名。
25、Select cno ,cname from course where cno in (Select distinct(cno ) from sc)
26、Select cno ,cname from course where exists (select * from sc where
https://www.wendangku.net/doc/4211421974.html,o=https://www.wendangku.net/doc/4211421974.html,o)
27、查询没有选修课程的学生学号及姓名。
28、Select sno,sname from s where sno not in (select distinct(sno) from sc)
29、Select sno ,sname from s where not exists(select * from sc where
s.sno=sc.sno)
30、查询没有选修“1”号课程的学生姓名。
31、Select sname from s where sno not in (select distinct(sno) from sc where
cno=1)
32、Select sname from s where not exists (select * from sc where sc.sno=s.sno and
https://www.wendangku.net/doc/4211421974.html,o=1)
33、查询既选修了“数据结构”又选修了“操作系统”的学生姓名。
34、Select sname from s.c,sc where s.sno=sc.sno and https://www.wendangku.net/doc/4211421974.html,o=https://www.wendangku.net/doc/4211421974.html,o and cname=’
数据结构’
35、Select sname from s where sno in (select sno from sc where cno=(slect cno
from c where cname=’数据结构’) and sno in (select sno from sc where cno=(select cno from c where cname=’操作系统’)))
36、Select sname from s where sno in (select sno from sc sc1,sc sc2 where
sc1.sno=sc2.sno and https://www.wendangku.net/doc/4211421974.html,o=(slect cno from c where cname=’数据结构’) and https://www.wendangku.net/doc/4211421974.html,o=(select cno from c where cname=’操作系统’))
37、查询既选修了“2”号又选修了“4”号课程的学生学号。
38、Select sno from sc where cno=2 and sno in(select sno from sc where cno=4)
39、Select sno from sc sc1,sc sc2 where sc1.sno=sc2.sno and https://www.wendangku.net/doc/4211421974.html,o=2 and
https://www.wendangku.net/doc/4211421974.html,o=4
40、查询选修了“2”号或“4”号课程的学生学号。
41、Select sno from sc where cno=2 or cno=4
42、查询至少选修了“95002”学生所选课程的学生学号。
43、Select scx.sno from sc scx where not exists (select * from sc scy where
scy.sno=’95002’ and not exists (select * from sc scz where https://www.wendangku.net/doc/4211421974.html,o=https://www.wendangku.net/doc/4211421974.html,o and scz.sno=scx.sno))
44、查询至少选修了一门其间接先行课为“7”号课程的学生姓名。
45、Select sname from s where sno in(Select sno from sc where cno in (Select
https://www.wendangku.net/doc/4211421974.html,o from c c1,c c1 where c1.cpno=https://www.wendangku.net/doc/4211421974.html,o and c2.cpno=7))
46、查询选修了所有课程的学生姓名。
47、Select sname from s where not exists (select * from c where not exists
(select * from sc where https://www.wendangku.net/doc/4211421974.html,o=https://www.wendangku.net/doc/4211421974.html,o and sc.sno=s.sno))
48、查询“李勇”同学所选课程的平均成绩。
49、Select avg(grade) from sc where sno =(Select sno from s where sname =’李
勇’)
50、查询“操作系统”这门课的最高分及最低分。
51、Select max(grade),min(grade) from sc where cno=(select cno from course
where cname =’操作系统’)
52、查询“数据结构”这门课的选课人数。
53、Select count(sno) from sc where cno =(select cno from course where
cname=’数据结构’)
54、查询“CS”系的所有学生的学号、姓名、课程名及成绩。
55、Select sno,sname,cname,grade from s,sc,c where s.sno=sc.sno and
https://www.wendangku.net/doc/4211421974.html,o=https://www.wendangku.net/doc/4211421974.html,o and sdept=’CS’
56、查询“CS”系选修课程的成绩在90分以上的所有女生的姓名、课程名和
成绩。
57、Select sname,cname,grade from s,sc,c where s.sno=sc.sno and https://www.wendangku.net/doc/4211421974.html,o=https://www.wendangku.net/doc/4211421974.html,o
and sdept=’CS’ and grade >=90 and ssex like ‘女’
关系代数 关系代数是关系数据库系统查询语言的理论基础。 关系代数的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的学生学号。 π1(σ1=4∧2='C2'∧5='C4'(SC×SC)) 这里(SC×SC)表示关系SC自身相乘的乘积操作,其中数字1,2,4,5都为它的结果
1.设有如图所示的关系S、SC和C,试用关系代数表达式表示下列查询语句: S C SC S# SNAME AGE SEX 1 李强23 男 2 刘丽22 女5 张友22 男C# CNAME TEACHER k1 C语言王华 k5 数据库原理程军 k8 编译原理程军 S# C# GRADE 1 k1 83 2 k1 85 5 k1 92 2 k5 90 5 k5 84 5 k8 80 (1) 检索”程军”老师所授课的课程号(C#)和课程名(CNAME)。 (2) 检索年龄大于21的男学生学号(S#)和姓名(SNAME)。 (3) 检索至少选修”程军”老师所授全部课程的学生姓名(SNAME)。 (4) 检索”李强”同学不学课程的课程号(C#)。 (5) 检索至少选修两门课程的课程号(S#)。 (6) 检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。 (7) 检索选修课程包含”程军”老师所授课程之一的学生学号(S#)。 (8) 检索选修课程号为k1和k5的学生学号(S#)。 (9) 检索选修全部课程的学生姓名(SNAME)。 (10) 检索选修课程包含学号为2的学生所选修课程的学生学号(S#)。 (11) 检索选修课程名为”C语言”的学生学号(S#)和姓名(SNAME)。(12)检索没有一门课程成绩不及格的学生学号,姓名。 答:本题各个查询语句对应的关系代数表达式表示如下: (1) ΠC#,CNAME(σTEACHER ='程军'(C)) (2) ΠS#,SNAME(σAGE>21^SEX ='男'(S)) (3) ΠSNAME(S(ΠS#,C#(SC)÷ΠC#(σTEACHER ='程军'(C)))) (4) ΠC#(C)-ΠC#(σSNAME ='李强'(S)∞SC) (5) ΠS# (σ1=4^2≠5 (S C×SC)) (6) ΠC#,CNAME(C∞(ΠS#,C#(SC)÷ΠS#(S))) (7) ΠS# (SC∞ΠC# (σTEACHER ='程军'(C))) (8) ΠS#,C#(SC)÷ΠC#(σC#=’K1’VC#=’K5’ (C)) (9) ΠSNAME(S∞(ΠS#,C#(SC)÷ΠC#(C))) (10) ΠS#,C#(SC)÷ΠC#(σC#=’2’ (S C)) (11) ΠS#,SNAME(S∞ΠS#(SC∞(σCNAME ='C语言'(C)))) (12)П学号,姓名(学生)-П学号,姓名(σ分数<60(学生∞学习))。
1. 下面的选项不是关系数据库基本特征的是()。 A.不同的列应有不同的数据类型 B.不同的列应有不同的列名 C.与行的次序无关 D.与列的次序无关 2. 一个关系只有一个()。 A.候选码 B. 外码 C. 超码 D. 主码 3. 关系模型中,一个码是()。 A.可以由多个任意属性组成 B.至多由一个属性组成 C.可有多个或者一个其值能够唯一表示该关系模式中任何元组的属性组成 D.以上都不是 4. 现有如下关系: 患者(患者编号,患者姓名,性别,出生日起,所在单位) 医疗(患者编号,患者姓名,医生编号,医生姓名,诊断日期,诊断结果) 其中,医疗关系中的外码是()。 A. 患者编号 B. 患者姓名 C. 患者编号和患者姓名 D. 医生编号和患者编号 5. 现有一个关系:借阅(书号,书名,库存数,读者号,借期,还期),假如同一本书允许一个读者多次借阅,但不能同时对一种书借多本,则该关系模式的外码是()。 A. 书号 B. 读者号 C. 书号+读者号 D. 书号+读者号+借期 6. 关系模型中实现实体间N:M 联系是通过增加一个()。
A.关系实现 B. 属性实现 C. 关系或一个属性实现 D. 关系和一个属性实现 7. 关系代数运算是以()为基础的运算。 A. 关系运算 B. 谓词演算 C. 集合运算 D. 代数运算 8. 关系数据库管理系统应能实现的专门关系运算包括()。 A. 排序、索引、统计 B. 选择、投影、连接 C. 关联、更新、排序 D. 显示、打印、制表 9. 五种基本关系代数运算是()。 A.∪-× σ π B.∪-σ π C.∪∩× σ π D.∪∩σ π 11. 关系数据库中的投影操作是指从关系中()。 A.抽出特定记录 B. 抽出特定字段 C.建立相应的影像 D. 建立相应的图形 12. 从一个数据库文件中取出满足某个条件的所有记录形成一个新的数据库文件的操作是()操作。 A.投影 B. 联接 C. 选择 D. 复制 13. 关系代数中的联接操作是由()操作组合而成。 A.选择和投影 B. 选择和笛卡尔积 C.投影、选择、笛卡尔积 D. 投影和笛卡尔积 14. 自然联接是构成新关系的有效方法。一般情况下,当对关系R和S是用自然联接时,要求R和S含有一个或者多个共有的()。 A.记录 B. 行 C. 属性 D. 元组 15. 假设有关系R和S,在下列的关系运算中,()运算不要求:“R 和S具有相同的元数,且它们的对应属性的数据类型也相同” 。
针对书上的学生选课数据库S_T,用关系代数和SQL语言完成以下查询: 1、查询“CS”系所有学生的学号和姓名。 2、Slelect sno,sname from student where sdept =’CS’ 3、查询所有姓“刘”的学生的信息。 4、Select * from student where sname like ‘刘%’ 5、查询年龄在18至20岁之间的学生信息。 6、Select * from student where sage between 18 and 20 7、查询不在“CS”系也不在“MA”系的学生的所有信息。 8、Select * from student where sdept not in (‘CS’,’MA’) 9、查询“CS”系所有学生的平均年龄。 10、Select avg(sage) from student where sdept like ‘CS’ 11、查询课程名是以“系统”结尾的课程信息。 12、Select * from course where cname like ‘%系统’ 13、查询先行课为“6”号课程的课程信息。 14、Select * from course where cpno=6 15、查询间接先行课为“5”号课程的课程号及课程名。 16、Select , from c c1,c c2 where = and =5 17、Select cno ,cname from course where cpno in (select cno from course where cpno=5) 18、查询没有先行课的课程名。 19、Select cname from course where cpno is null 20、查询选修了“1”号课程的学生选课信息。 21、Select * from sc where cno=1 22、查询成绩为90分以上的学生姓名和课程名。 23、Select sname ,cname from s,c,sc where = and = and grade>=90 24、查询被选修了的课程号及课程名。
2.现有关系数据库如下: 学生(学号,姓名,性别,专业,奖学金)。 课程(课程号,名称,学分)。 学习(学号,课程号,分数)。 用关系代数表达式实现下列1-4小题: 1. 检索"英语"专业学生所学课程的信息,包括学号、姓名、课程名和分数。 П学号,姓名,课程名,分数(σ专业='英语'(学生∞学习∞课程))。 2. 检索"数据库原理"课程成绩高于90分的所有学生的学号、姓名、专业和分数。 П学号,姓名,专业,分数(σ分数>90∧名称='数据库原理'(学生∞学习∞课程))。 3. 检索不学课程号为"C135"课程的学生信息,包括学号,姓名和专业。 П学号,姓名,专业(学生)-П学号,姓名,专业(σ课程号='C135'(学生∞学习))。 4. 检索没有任何一门课程成绩不及格的所有学生的信息,包括学号、姓名和专业。 П学号,姓名,专业(学生)-П学号,姓名,专业(σ分数<60(学生∞学习))。 5.检索选修全部课程的学生姓名 6.检索至少选修了李强同学所选修的全部课程的学生姓名。
3.现有关系数据库如下: 学生(学号,姓名,性别,专业、奖学金)。 课程(课程号,名称,学分)。 学习(学号,课程号,分数)。 用关系代数表达式实现下列1—4小题: 1. 检索“国际贸易”专业中获得奖学金的学生信息,包括学号、姓名、课程名和分数。 Π学号,姓名,课程名,分数(σ奖学金>0∧专业=国际贸易(学生∞学习∞课程))。 2. 检索学生成绩得过满分(100分)的课程的课程号、名称和学分。 Π课程号,名称,学分(σ分数=100(学习∞课程))。 3. 检索没有获得奖学金、同时至少有一门课程成绩在95分以上的学生信息,包括学号、姓名和专业。 Π学号,姓名,专业(σ奖学金<=0∧分数>95(学生∞学习))。 4. 检索没有任何一门课程成绩在80分以下的学生的信息,包括学号、姓名和专业。 Π学号,姓名,专业(学生)-Π学号,姓名,专业(σ分数<80(学生∞学习))。 4.设有关系S、SC和C,试用关系代数表达式完成下列操作。 S(snum,sname,age,sex),例:(1,“李强”,23,‘男’)是一条数据记录。SC(snum,cnum,score),例:(1,“C1”,83)是一条数据记录。C(cnum,cname,teacher) 例:(“C1”,“数据库原理”,“王华”)是一条数据记录。
习题四 1. 试述关系模型的三个组成部分。 .关系是由(R,U,D,dom,F )组成,R 为关系名,关系结构、关系操作、关系完整性约束 U 位组成关系的元组属性集合,D 为属性集合U 来自的域,dom 为对象关系的映像集合,F 为属性依赖关系集合。关系操作为关系代数、关系演算、关系映象操作,此语言表达能和功能强大,约束:参照完整性约束,用户自定义约束,实体完整性约束。 2. 试述关系数据语言的特点和分类。 关系操作语言灵活方便、语言表达能力和功能强,其特点:操作一体化,操作方式一次一集合,高度的非过程化的操作,关系操作语言包括:关系代数语言、关系演算语言、基于映像 的语言,关系代数语言是对关系的运算来表达查询的语言,关系演算语言查询元组的应该满足的谓词条件的运算查询语言, 基于映像的语言具有关系代数与关系演算的语言的双重特点 语言查询!
3. 定义并解释下列术语,说明它们之间的联系与区别。 主码、候选码、外码。)1 在一个关系中某个属性(或属性组)能够唯一标识一个元组,则称该属性为候选码,选择其 R 中属性F 不是R 的码,h 为K 关系的主码,如果F 与h 相对应,中一个为主码,在关系 则称 F 为管系R 的外码 笛卡尔积、关系、元组、属性、域。2)给定一组域D1,D2,D3 3)关系、关系模式、关系数据库。 4. 试述关系模型的完整性规则。在参照完整性中,为什么外码属性的值也可以为空?什么 情况下才可以为空? 5. 试述等值连接与自然连接的区别和联系。 6. 对于学生选课关系,其关系模式为: 学生(学号,姓名,年龄,所在系); 课程(课程名,课程号,先行课); 选课(学号,课程号成绩)。 用关系代数完成如下查询。 求学过数据库课程的学生的姓名和学号。1) 求学过数据库和数据结构的学生姓名和学号。2)求没学过数
数据库关系代数除法讲解 This manuscript was revised by JIEK MA on December 15th, 2012.
【数据库原理】关系代数篇——除法讲解 陈宇超编辑总结: 除法运算的一般形式示意图 如何计算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)
S003C00269 S005C00277 S005C00398 有存在量词的谓词。 解决这类的除法问题一般采用双嵌套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=and= ) ) 也可以采用自连接 select from (select*from sc where cno='C001')as s1, (select*from sc where cno='C003')as s2 where= (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=and= ) ) (4)求选择了全部课程的学生的学号 解此例的等价自然语义是,输出这样的学号,不存在某门课程在他的选课记录里没有选这门课 关系代数表达式:∏sno (sc÷∏cno(course) ) Sql语句 select distinct sno from sc A where not exists
一、选择题 1关系代数运算可以分为两类:传统的集合运算和专门的关系运算?下面列出的操作符中,属于传统的集合运算是( A ) I .n(交)n .u(并)『x(广义笛卡儿积)w?一(差)v.n(投影)w选择) A)I、n、川和w B)川、w、V和w C)I、川、V和w D)都是 2、关系数据库管理系统能实现的专门关系操作包括(B) A、显来,打印和制表 B、选择,投影和连接 C、关联、更新和排序 D、排序、索引和统计 3、在关系数据基本操作中,从表中选项出满足某种条件的记录的操作称为( A ) A、选择 B、投影 C、连接 D、扫描 4、元组的集合在关系数据库中称为关系,一般来说,表示元组的属性或者最小属性组称为D A、字段 B、索引 C、标记 D、主键 5、在下面3个关系中 学生S (SNO , SNAME , SEX, AGE )课程 C (CNO , CNAME , CREDIT )学生选课SC (SNO, CNO , GRADE ) 要查找选修“数据库”课程的女学生的姓名,将涉及到关系(D) A、S B、C, SC C、S, SC DS, C, SC 6、对于关系数据库来讲,下面(C)说法是错误的。 A、每一列的分量是同一种类型数据,来自同一个域 B、不同列的数据可以出自同一个域 C、行的顺序可以任意交换,但列的顺序不能任意交换 关系中的任意两个元组不能完全相同 7、关系数据库中有3种基本操作,从表中取出满足条件的属性的操作是(A) A、选择 B、投影 C、连接 D、扫描 8、关系数据库在有3种基本操作,将具有共同属性的两个关系中的元组连接到一起,构成新表的操作称为(C ) A、选择 B、投影 C、连接 D、扫描 9 若D1={a1,a2,a3} , D2={b1,b2,b3},贝U D1*D2 集合中共有元组(C)个 A、 6 B、8 C、9 D、12 10下列(C)运算不是专门的关系运算 A、选择 B、投影 C、笛卡尔积 D、连接 11、如下两个关系R1和R2,它们进行运算后得到R3。(D ) R1 R2 B D E 1M I 2N J A__M R3 A 1 X M I D 1 Y M I
关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。 关系代数的运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符 比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的,所以按照运算符的不同,主要将关系代数分为传统的集合运算和专门的关系运算两类。 传统的集合运算是二目运算,包括并、交、差、广义笛卡尔积四种运算。 ⒈并(Union) 设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的元组组成。其结果关系仍为n目关系。记作: R∪S={t|t∈R∨t∈S} ⒉差(Difference) 设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成。其结果关系仍为n目关系。记作: R-S={t|t∈R∧t?S} ⒊交(Intersection Referential integrity) 设关系R和关系S具有相同的目n,且相应的属性取自同一个域,
则关系R与关系S的交由既属于R又属于S的元组组成。其结果关系仍为n目关系。记作: R∩S={t|t∈R∧t∈S} ⒋广义笛卡尔积(Extended cartesian product) 两个分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m 列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。
习题四 1. 试述关系模型的三个组成部分。 关系结构、关系操作、关系完整性约束.关系是由(R,U,D,dom,F )组成,R 为关系名,U 位组成关系的元组属性集合, D 为属性集合U 来自的域,dom 为对象关系的映像集合, F 为属性依赖关系集合。关系操作为关系代数、关系演算、关系映象操作,此语言表达能和功能强大,约束:参照完整性约束,用户自定义约束,实体完整性约束。 2. 试述关系数据语言的特点和分类。 关系操作语言灵活方便、语言表达能力和功能强,其特点:操作一体化,操作方式一次一集 合,高度的非过程化的操作,关系操作语言包括:关系代数语言、关系演算语言、基于映像 的语言,关系代数语言是对关系的运算来表达查询的语言,关系演算语言查询元组的应该满 足的谓词条件的运算查询语言,基于映像的语言具有关系代数与关系演算的语言的双重特点 语言查询! 3. 定义并解释下列术语,说明它们之间的联系与区别。 1)主码、候选码、外码。 在一个关系中某个属性(或属性组)能够唯一标识一个元组,则称该属性为候选码,选择其 中一个为主码,在关系R 中属性 F 不是R 的码,h 为K 关系的主码,如果 F 与h 相对应,则称 F 为管系R 的外码 2)笛卡尔积、关系、元组、属性、域。 给定一组域D1,D2,D3 3) 关系、关系模式、关系数据库。 4. 试述关系模型的完整性规则。在参照完整性中,为什么外码属性的值也可以为空?什么 情况下才可以为空? 5. 试述等值连接与自然连接的区别和联系。 6. 对于学生选课关系,其关系模式为: 学生(学号,姓名,年龄,所在系); 课程(课程名,课程号,先行课); 选课(学号,课程号成绩)。 用关系代数完成如下查询。 1)求学过数据库课程的学生的姓名和学号。 2)求学过数据库和数据结构的学生姓名和学号。 3)求没学过数据库课程的学生学号。 4)求学过数据库的先行课的学生学号。
1.现有关系数据库如下: 学生(学号,姓名,性别,专业,奖学金)。 课程(课程号,名称,学分)。 学习(学号,课程号,分数)。 用关系代数表达式实现下列1-4小题: 1. 检索"英语"专业学生所学课程的信息,包括学号、姓名、课程名和分数。 π学号,姓名,课程名,分数(б专业=英语(学生?学习?课程)) 2. 检索"数据库原理"课程成绩高于90分的所有学生的学号、姓名、专业和分数。 π学号,姓名,专业,分数(б分数>90Λ名称=数据库原理(学生?学习?课程)) 3. 检索不学课程号为"C135"课程的学生信息,包括学号,姓名和专业。 π学号,姓名,专业(学生)—π学号,姓名,专业(б课程号=C135(学生?学习)) 4. 检索没有任何一门课程成绩不及格的所有学生的信息,包括学号、姓名和专业。 π学号,姓名,专业(学习)—π学号,姓名,专业(б分数>=60(学生?学习))
2.现有关系数据库如下: 学生(学号,姓名,性别,专业、奖学金)。 课程(课程号,名称,学分)。 学习(学号,课程号,分数)。 用关系代数表达式实现下列1—4小题: 1.检索“国际贸易”专业中获得奖学金的学生信息,包括学号、姓名、课程名和分数。 π学号,姓名,专业(б奖学金>OΛ专业=国际贸易(学生?学习?课程)) 2.检索学生成绩得过满分(100分)的课程的课程号、名称和学分。 π课程号,名称,学分(б成绩=100(学生?学习?课程)) 3. 检索没有获得奖学金、同时至少有一门课程成绩在95分以上的学生信息,包括学号、姓名和专业。 π课程号,名称,学分(б奖学金=OΛ成绩>95(学生?学习?课程)) 4. 检索没有任何一门课程成绩在80分以下的学生的信息,包括学号、姓名和专业。 π学号,姓名,专业(б成绩>80(学生?学习))
1.设有如图所示的关系S 、SC 和C,试用关系代数表达式表示下列查询语句: S C SC (1) 检索”程军”老师所授课的课程号(C#)和课程名(CNAME)。 (2) 检索年龄大于21的男学生学号(S#)和姓名(SNAME)。 (3) 检索至少选修”程军”老师所授全部课程的学生姓名(SNAME)。 (4) 检索”李强”同学不学课程的课程号(C#)。 (5) 检索至少选修两门课程的课程号(S#)。 (6) 检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。 (7) 检索选修课程包含”程军”老师所授课程之一的学生学号(S#)。 (8) 检索选修课程号为k1和k5的学生学号(S#)。 (9) 检索选修全部课程的学生姓名(SNAME)。 (10) 检索选修课程包含学号为2的学生所选修课程的学生学号(S#)。 (11) 检索选修课程名为”C 语言”的学生学号(S#)和姓名(SNAME)。 (12)检索没有一门课程成绩不及格的学生学号,姓名。 答:本题各个查询语句对应的关系代数表达式表示如下: (1) ΠC#,CNAME (σTEACHER ='程军'(C)) (2) ΠS#,SNAME (σAGE>21^SEX ='男'(S)) (3) ΠSNAME (S (ΠS#,C#(SC )÷ΠC#( σTEACHER ='程军'(C)))) (4) ΠC#(C)-ΠC#(σSNAME ='李强'(S )∞ SC) (5) ΠS# (σ1=4^2≠5 (S C ×SC )) (6) ΠC#,CNAME (C ∞ (ΠS#,C#(SC )÷ΠS#(S ))) (7) ΠS# (SC ∞ΠC# (σTEACHER ='程军'(C))) (8) ΠS#,C#(SC )÷ΠC#(σC#=’K1’VC#=’K5’ (C )) (9) ΠSNAME (S ∞ (ΠS#,C#(SC )÷ΠC#(C))) (10) ΠS#,C#(SC )÷ΠC#(σC#=’2’ (S C )) (11) ΠS#,SNAME (S ∞ΠS#(SC ∞ (σCNAME ='C 语言'(C)))) (12)П学号,姓名(学生)-П学号,姓名(σ分数<60(学生∞学习))。
数据库关系代数 (1)基本概念 属性和字段: 每个事物都有许多属性,每个属性的值范围称为一个域,所有对域都是原子数据(第一范式)。 相关术语 N元关系:R(D1,D2,D3。。。Dn)是一个N元素关系,其中关系属性的数目称为“元组”,元组的数目称为“基数”,即记录值。候选代码:如果关系中的属性或属性组的值可以唯一地标识元组 主机代码:可以选择任意候选代码作为主机代码 主属性:包含在任何候选代码中的属性称为主属性 完整代码:关系模型中的所有属性都是此关系模型的候选代码,称为完整代码 外部代码:关系模式中不是该关系代码的属性称为外部代码 ③三种类型: 基本表:实际存在的表 查询表:查询结果对应的表 视图表:由基本表和其他视图表导出的表,不是实际存在数据库中④完整性约束: 实体完整性:主属性A不能为空值 参照完整性:用实体之间的关系来描述,若F是关系R的外码,则F 或者是空值,或者是某个元组的主码值
用户定义完整性:根据具体关系数据的约束条件,比如数据范围等(2)关系五种基本运算 ①并:R,S具有相同的关系模式(元素相同,结构相同),记为R U S,返回由R或者S元组构成的集合组成 ②差:R,S具有相同的关系模式(元素相同,结构相同),记为R-S,右属于R但不属于S的元组组成 ③广义笛卡尔积:R×S由n目和m目的关系R,S组成一个(n+m)列的元组集合,若R有K1个元组,S有K2个元组,则R×S有K1*K2个元组 ④投影(π):从关系的垂直方向开始运算,选择关系中的若干列组成新的列。 ⑤选择(σ):选择从关系的水平方向进行元算,选择满足给定条件的元组组成新的关系。 (3)扩展的关系代数运算 ①交:R∩S=R-(R-S),R,S具有相同的关系模式 ②链接:链接分为θ链接,等值链接和自然链接 θ链接:从R,S的笛卡尔积中选择满足一定条件的元组 等值链接:当θ为“=”时为等值链接 自然链接:是一种特殊的等值链接,比较的分量必须是相同的属性组,并在结果集中去掉重复列,如果没有重复列,自然链接就转换为笛卡尔积 ③除:同时从水平方向和垂直方向进行运算,给定关系R(X,Y)和
1. 先做习题 2(1~3 题) 1. (1)简述关系代数中并、交、差、选择、投影、连接、除的定义。答:并:关系 R 与关系 S的并由属于 R 或属于 S的所有元素组成。 差:关系 R 与关系 S 的差由属于 R 而不属于 S 的所有元素组成。交:关系 R 与关系 S的交即属于 R 又属于 S的所有元素组成。选择:选择是从行的角度进行的运算,选出满足条件的那些记录构成原关系的一个子集。 投影:投影是从列的角度进行运算,所得到属性列个数通常比原关系少,或者属性列 的排列顺序不同。 连接:两个关系中的记录按一定条件横向结合,生成一个新的关系。除:R中的属性包含 S中的属性, R 中的有些属性不出现在 S中。 (2) (3) 等值连接:当算术比较值为“ =”时,是一种特殊的也是最为常用的θ 连接,等值连接是从关系 R 与关系 S 的广义笛卡尔积中选取 i,j 属性值相等的元组。自然连接是一种特殊的等值连接,它要求二个关系中进行比较分量i, j 必须是相同属 性组,并且在结果中去掉了重复的属性列。 2. 设教学库中有三个关系:学生关系 S(S#,SNAME ,AGE ,SEX)学习关系 SC(S#, C#, GRADE)课程关系 C(C# , CNAME ,TEACHER) 请用关系代数表达式表达各个查 询语句 1.检索学习课程号为 C2 的学生学号与成绩。 答:∏ s#,grade(σ c=c2(SC × C)) 2.检索学习课程号为 C2 的学生学号与姓名。 答:∏ s#,sname(σ c=c2(S× C)); 3,检索选修课程 答:∏ c 选修( C 3 已知 R 关系与 S 关系
1?设有如图所示的关系S 、SC 和C,试用关系代数表达式表示下 列查询语句: ⑴ 检索”程军”老师所授课的课程号(C#)和课程名(CNAME)。 (2) 检索年龄大于21的男学生学号(S#)和姓名(SNAME)。 (3) 检索至少选修”程军”老师所授全部课程的学生姓名 (SNAME) o (4) 检索”李强”同学不学课程的课程号(C#)o (5) 检索至少选修两门课程的课程号 (S#)o (6) 检索全部学生都选修的课程的课程号 (C#)和课程名(CNAME) o (7) 检索选修课程包含”程军”老师所授课程之一的学生学号 (S#)o (8) 检索选修课程号为 k1和k5的学生学号(S#)o (9) 检索选修全部课程的学生姓名 (SNAME) o (10) 检索选修课程包含学号为 2的学生所选修课程的学生学号 (S#) o (11) 检索选修课程名为” C 语言”的学生学号(S#)和姓名(SNAME) o (12) 检索没有一门课程成绩不及格的学生学号,姓名。 答:本题各个查询语句对应的关系代数表达式表示如下 : (1) n C#,CNAME ( b TEACHER ='程军'(C)) (2) n S#,SNAME ( b AGE>2MSEX ='男'(S)) (3) n SNAME (S ;“"J ( n S#,C#(SC) *n C#( b TEACHER ='程军'(C)))) (4) n C #(C)- n C #( b SNAME ='李强(S) s SC) (5) n S# ( o-1=4A 2 * 5 (SC X SC) (6) n C #,CNAME (C S (n S #,C #(SC) *n s#(S)) ⑺ n S# (SC s n C# ( O TEACHER ='程军'(C))) (8) n S #,C #(SC) * n C #( o c#=*1vc#='K5' (C)) (9) n SNAME (S S (n S #,C #(SC) * n c#(c ))) (10) n S #,C #(SC) * n C #( O C #=2 (SC)) (11) n S#,SNAME (S s n S#(SC s ( O CNAME ='C 语言'(C)))) (12)n 学号,姓名(学生)-n 学号,姓名(O 分数<60(学生s 学习)) S# SNAME AGE SEX 1 李强 23 男 2 刘丽 22 女 5 张友 22 男 C# CNAME TEACHER k1 C 语言 王华 k5 数据库原理 程军 k8 编译原理 程军 SC
小测验1 (一)单项选择题 1.关系模型基本的数据结构是(D) A.树B.图 C.索引 D.关系 2.关系数据库的查询语言是一种(C) A 过程性语言 B.第三代语言 c.非过程性语言 D.高级程序设计语言 3.关系模型中,实体完整性规则是(B) A.实体不允许是空实体 B.实体的主键值不允许是空值 c.实体的外键值不允许是空值 D.实体的属性值不允许是空值 4.关系数据库的数据操作分为两类(A) A.查询和更新 B.排序和索引c.插入和删除 D.修改和排序 5.在关系模型中,下列说法正确的为( D )。 A.关系中存在可分解的属性值 B. 关系中允许出现相同的元组 C.关系中考虑元组的顺序 D.元组中,属性理沦上是无序的,但使用时按习惯考虑列的顺序 6. 在关系模型中,下列说法正确的为(B) A.关系中元组在组成主键的属性上可以有空值 B.关系中元组在组成主键的属性上不能有空值 C.主键值起不了唯一标识元组的作用 D.关系中可引用不存在的实体 7.下列为非过程语言的为( C )。 A.汇编语言 B.PASCAL语言‘ C.关系查询语言D.C语言 8.设关系R、s、w各有10个元组,则这三个关系的笛卡尔积的基数为(C)A.10 B.30 C.1000 D.不确定(与计算结果有关) 9.关系代数中,一般联接操作由(A)组合而成。 A.笛卡尔积和选择 B.笛卡尔积、选择和投影 C.笛卡尔积和投影 D.投影和选择 10.设关系R和S的属性个数分别为r和s,那么(R x S)操作结果的属性个数为( A ) A.r十s B.r-s C.r×s D.max(r,s) 11.设关系R和s的结构相同,且各有100个元组,则这两个关系的并操作结果的元组个数为(D) A.100 B.小于等于100 C.200 D. 小于等于200 12.关系代数的交操作可以由(B)操作组合而成。 A.并和差 B.差C.选择 D.联接 13.如果两个关系没有公共属性,那么其自然联接操作(A) A.转化为笛卡尔积操作B.转化为联接操作 c.转化为外部并操作D.结果为空关系 14.设关系R和S的值如下:
一、设教学库中有三个关系: 学生关系S(S#,SNAME,AGE,SEX) 学习关系SC(S#,C#,GRADE) 课程关系C(C#,CNAME,TEACHER) 下面用关系代数表达式表达各个查询语句 1.检索学习课程号为C2的学生学号与成绩。πS#,GRADE(σC#=‘C2’(SC)) 2.检索学习课程号为C2的学生学号与姓名。πS#,SNAME(σC#=‘C2’(S∞SC)) 3.检索选修课程名为MATHS的学生学号与姓名。πS#,SNAME(σCNAME=‘MATHS’( S∞SC∞C)) 4.检索选修课程号为C2或C4的学生学号。πS#(σC#=‘C2’∨C#=‘C4’(SC)) 5.检索不学C2课的学生姓名与年龄。πSNAME,AGE(S)-πSNAME,AGE( σC#=‘C2’( S∞SC)) 6.检索学习全部课程的学生姓名。 学生选课情况:πS#,C#(SC)全部课程:πC#(C) 学了全部课程的学生的学号用除操作,结果是学号S#集:πS#,C#(SC)÷πC#(C) 从S#求学生姓名,可用自然联接和投影组合操作: πSNAME(S∞(πS#,C#(SC)÷πC#(C)))
二、设有一个数据库: 学生关系模式:S(学号S#,姓名SNAME,年龄AGE,性别SEX) 学生课程模式:SC(学号S#,课程号C#,成绩GRADE) 课程关系模式:C(课程号C#,课程名CNAME,教师TEACHER) 试用关系代数表达式表示下列查询语句: 1.检索年龄大于20岁的男学生的学号、姓名。πS#,SNAMEσAGE>20∧SEX=”男”(S) 2.检索田老师所授课程的课程号、课程名πC#,CNAMEσTEACHER=”田老师”(C) 3.检索全部学生都选修的课程的课程号、课程名。 所有的学生:πS#(S);所有学生选修课程的情况:πS#,C#(SC) 这里需要确定:哪一门课程包含了所有的学生 πS#,C#(SC) ÷πS#(S),该结果集是C# 求C#,CNAME可用投影和自然连接: πC#,CNAME(C∞(πS#,C#(SC)÷πS#(S))) 可简化为:πC#,CNAME,S#(SC∞C) ÷πS#(S)
数据库关系代数表达式学习 关系代数是关系数据库系统查询语言的理论基础 一、关系代数的9种操作: 关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。 五个基本操作: 并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π) 四个组合操作: 交(∩)、联接(等值联接)、自然联接(R S)、除法(÷) 注2:等值连接表示先做笛卡尔积(×)之后,对相应列进行选择或等值关联后的结果(仅筛选行、不筛选列) 注2:自然连接表示两个关系中若有相同名称的属性,则自动作为关联条件,且仅列出一列 二、关系代数表达式: 由关系代数运算经有限次复合而成的式子称为关系代数表达式。这种表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的查询和更新操作。 三、举例说明: 设教学数据库中有3个关系: 学生关系S(SNO, SNAME,AGE,SEX) 学习关系SC(SNO,CNO,GRADE) 课程关系C(CNO,CNAME,TEACHER) (1) 检索学习课程号为C2的学生学号与成绩 ------------------------------------ SELECT SNO,GRADE FROM SC WHERE CNO='C2' ------------------------------------ π SNO, GRADE (σ CNO='C2' (SC)) ************************************ (2) 检索学习课程号为C2的学生学号与姓名 ------------------------------------ SELECT SC.SNO,S.SNAME
【数据库原理】关系代数篇——除法讲解 陈宇超编辑总结: 除法运算的一般形式示意图 如何计算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属性中为 A a1 ,请瞧下面的例题 设有教学数据库有3个关系(以下四小问均用除法的思想解决) 学生信息关系student(sno,sname,age,sex) 学生选课关系sc(sno,cno,score) 学校课程关系course(cno,cname) sno sname age sex S001 陈晓16 男
S002 周倩21 女 S003 华南19 男 S004 曹匀21 女 S005 郑威20 男 Course表 cno cname C001 计算机科学 C002 诗歌鉴赏 C003 资本论 sno cno score S001 C001 88 S001 C002 95 S001 C003 99 S002 C001 97 S002 C003 84 S003 C002 69 S005 C002 77 S005 C003 98 价的带有存在量词的谓词。 解决这类的除法问题一般采用双嵌套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 B、cno=C、cno ) ) 也可以采用自连接 select s1、sno from (select*from sc where cno='C001')as s1,
2. 现有关系数据库如下:学生(学号,姓名,性别,专业,奖学金)。课程(课程 号,名称,学分)。学习(学号,课程号,分数)。用关系代数表达式实现下列1-4 小题: 1. 检索" 英语"专业学生所学课程的信息,包括学号、姓名、课程名和分数。 П 学号,姓名,课程名,分数(σ专业=' 英语' (学生∞学习∞课程))。 2. 检索"数据库原理"课程成绩高于90分的所有学生的学号、姓名、专业和分数。 П 学号,姓名,专业,分数(σ分数>90 ∧名称=' 数据库原理'(学生∞学习∞课程))。 3. 检索不学课程号为"C135" 课程的学生信息,包括学号,姓名和专业。 П 学号,姓名,专业(学生)- П 学号,姓名,专业(σ课程号='C135' (学生∞学习))。 4. 检索没有任何一门课程成绩不及格的所有学生的信息,包括学号、姓名和专业。 П 学号,姓名,专业(学生)- П 学号,姓名,专业(σ分数<60(学生∞学习))。 5. 检索选修全部课程的学生姓名 6. 检索至少选修了李强同学所选修的全部课程的学生姓名。 3. 现有关系数据库如下: 学生(学号,姓名,性别,专业、奖学金)。 课程(课程号,名称,学分)。学习(学号,课程号,分数)。用关系代数表达式实现下列1—4 小题: 1. 检索“国际贸易”专业中获得奖学金的学生信息,包括学号、姓名、课程名和分数。 Π学号,姓名,课程名,分数(σ奖学金>0∧专业=国际贸易(学生∞学习∞课程))。 2. 检索学生成绩得过满分(100 分)的课程的课程号、名称和学分。 Π课程号,名称,学分(σ分数=1 00(学习∞课程))。
3. 检索没有获得奖学金、同时至少有一门课程成绩在95 分以上 的学生信息,包括学号、姓名和专业。 Π学号,姓名,专业( σ奖学金<=0∧分数>95( 学生∞学习)) 。 4. 检索没有任何一门课程成绩在80 分以下的学生的信息,包括学号、姓名和专业。 Π学号,姓名,专业( 学生)- Π学号,姓名,专业( σ分数<80( 学生∞学习)) 。4.设有关系S、SC和C,试用关系代数表达式完成下列操作。 S(snum,sname,age,sex ), 例:(1,“李强”,23,‘男')是一条数据记录。 SC(snum,cnum,score) ,例:(1,“ C1”,83) 是一条数据记录。 C(cnum,cname,teacher) 例:(“ C1”,“数据库原理”,“王华”)是一条数据记录。 (1) 检索“刘祥”同学不学课程的课程号。 (2) 检索有一门课程成绩在90 分以上的男同学的姓名。 (3) 列出没有选修“人工智能”的学生名单。 (4) 找出选修了袁老师教的所有课程的学生名单。 (5) 查找每门课程成绩在70 分以上并且平均成绩在75 分以上的学生名单。 5.数据模型如下: 厂家S(SNO,SNAME,STATUS,CITY) 产品P(PNO,PNAME,WEIGHT,COLOR) 工程J(JNO,JNAME,CITY) 供货SPJ(SNO,PNO,JNO,QTY) 用关系代数写出下述操作. 1. 给出为工程J1 供货的厂商号. 2. 给出供货量在300~500 之间的所有供货情况. 3. 给出由LODON的厂商供给LODON的工程的产品号. 4. 给出满足如下条件的所有产品号: 提供该零件的厂商和使用该零件的工程在同一城 市. 5. 给出由S1 提供产品的工程名. 6. 给出使用了由供应红色产品的厂商供应的产品的工程名. 7. 求使用了全部零件的工程名. 8. 供应P1,P2 两种产品的厂家名. 9. 显示与” TV”颜色相同的产品名. 10. 给出使用了S1所提供的全部零件的工程名. 答案: