![cover](https://img-blog.csdnimg.cn/2060663dc9ef4832ac9147283401bff0.png)
关系代数表达式练习(针对难题)
关系代数表达式练习(针对难题)快进来检测一下自己的学习成果吧!!
教师关系 | T(T#,TNAME,TITLE) |
课程关系 | C(C#,CNAME,TNO) |
学生关系 | S(S#,SNAME,AGE,SEX) |
选课关系 | SC(S#,C#,SCORE) |
检索至少选修了C2,C4两门课程的学生学号:
这里的下标可以这样理解,课程表C取了别名SC1,SC2,SC1的第一个元素(学生学号)和SC2的第一个元素 (学生学号)相等(1=4),且(SC1的第二个元素(课程号)=C2,SC2的第二个元素(课程号)=C4)
C# | CNAME | TNO |
涉及减法相关:
检索不学C2课的学生姓名和年龄
最后并上S,是因为S中才有AGE属性
涉及除法相关:
检索学习全部课程的学生姓名
检索所学课程包含学生S3所学全部课程的学生学号
进阶:
供应商关系 | S(SNO,SNAME,SADDR) |
零件关系 | P(PNO,PNAME,COLOR.WEIGHT) |
工程项目关系 | J(JNO,JNAME,JCITY,BALANCE) |
供应关系 | SPJ(SNO,PNO,JNO,PRICE,QTY) |
检索使用了编号为P3零件的工程编号和名称
检索供应零件给工程J1,且零件颜色为红色的供应商名称和地址
检索使用了零件编号为P3或P5零件的工程编号JNO
πJNo(PNO='P3'VPNO='P5'(SPJ))
检索至少使用了编号为P3和P5零件的工程编号JNO
πз((SPJxSPJ))
检索不使用编号为P3零件的工程编号JNO和工程名称JNAME
或者
πJNO,JNAME((πJNO(J) - JNO(σPNO=’P3‘(SPJ)) ) J)
检索使用了全部零件的工程名称JNAME
检索使用零件包含编号为S1的供应商所供应的全部零件的工程编号JNO
💖💖在做题过程中我有一下感悟,可以跟大家分享一下💖💖
1.相同属性才能相减,例如:
● 检索不学C2课的学生姓名和年龄
●检索不使用编号为P3零件的工程编号JNO和工程名称JNAME
πJNO,JNAME((πJNO(J) - JNO(σPNO=’P3‘(SPJ)) ) J)
2.什么时候要使用数字代替呢?
当两个相同的属性出现在要求中时:例如
●检索至少使用了编号为P3和P5零件的工程编号JNO
πз((SPJxSPJ))
● 检索至少选修了C2,C4两门课程的学生学号:
但是这两个都是(并)的关系,如果是(或)的关系,就不需要使用数字了,例如:
检索使用了零件编号为P3或P5零件的工程编号JNO
πJNO(PNO='P3'VPNO='P5'(SPJ))
注:同时注意并后面需要跟(SPJSPJ),或后面只用(SPJ)
3.如果要求的属性和有联系的属性之间不相关,那么就先用要求的属性的表中有联系的属性,例如,下面的JNAME和全部零件没有关联,那么就要用JNO,通过SPJ,关联PNO:
●检索使用了全部零件的工程名称JNAME
4.在进行除法时,要求是什么属性(或者与该属性相关)就留下什么属性,例如:
● 检索所学课程包含学生S3所学全部课程的学生学号
●检索使用了全部零件的工程名称JNAME
JNO,PNO/PNO=JNO
5.在含有“全部”字样的关系代数表达式中,包含单个属性的要用无关联的表,并且“全部”后面跟的属性为除数的属性,例如:
●检索使用了全部零件的工程名称JNAME
其中检索PNO用的是P表,而不是SPJ表,并且除数的属性为零件编号PNO
● 检索学习全部课程的学生姓名
其中C#用的是C表
并且除数的属性为课程号C#
但是有关联其他表中属性的则例外:
●检索所学课程包含学生S3所学全部课程的学生学号
6.如果要求中存在多个表的属性,一定要加入关联表进行关联,例如:
● 检索供应零件给工程J1,且零件颜色为红色的供应商名称和地址
SPJ就是其中关联PNO和SNO的表
7.在有两个或者两个以上属性时,通常有两种写法:
1.第一种是先拉一个属性进行条件限制,再关联其他属性
2.直接通过条件判断,然后把两个表关联起来
●检索不使用编号为P3零件的工程编号JNO和工程名称JNAME
或者
πJNO,JNAME((πJNO(J) - JNO(σPNO=’P3‘(SPJ)) ) J)
● 检索使用了编号为P3零件的工程编号和名称
其实做题的时候,想一下写数据库语句的时候是怎么做的,就比较容易相通了,各位今天也要努力学习呀!!(^o^)/(^o^)/
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)