【数据库课程】研讨02
1. 用四种方法表达查询:检索马小红老师所授课程的学期,课程号,上课时间。
所需要使用的教师表:
开课表:
要进行如题的查询,明显需要进行多表查询,涉及到的表就是上述两张。先用联结查询的方式来实现:
select O.xq,O.kh,O.sksj from O,T
where T.xm='马小红' and T.gh=O.gh;
这是最常用的联结查询,执行时,要对表O和T做联结操作,在from子句后面写上执行联结操作的表名O和T,再在where子句中写上联结的条件T.gh=O.gh。要检索的老师姓名为马小红,所以附上T.xm=’马小红’即可完成。
第二种和第三种写法都是依靠嵌套查询实现的,第二种写法如下:
select xq,kh,sksj from O
where gh in(select gh from T where xm='马小红');
在嵌套查询中,最常用的谓词是in,并且嵌套的子查询在外层查询处理之前求解。该查询方式为非相关子查询,子查询只需要执行一次,子查询结果不再变化,供主查询使用。所以在该查询语句中,select gh from T where xm='马小红'
被优先执行,得到需要查询人物的工号后,再次在O表中进行查询,得到结果。
第三种写法如下:
select xq,kh,sksj from O where '马小红' in
(select xm from T where O.gh=T.gh);
该语句中的内层查询称为相关子查询,也就是说每查询一条记录,需要重新做一次子查询。处理过程如下:首先取外层查询中O的第一个元组(即表中每一行的数据),根据它的值和内层查询相关的属性值(即为gh)处理内层查询,若where子句返回值为真(即内层查询结果非空,也就是说内层有满足条件的元组,这里直观上看就是T中存在xm为’马小红’的元组,通过联结的方式得到其工号),则取此元组放入结果表(最后要输出的内容)中;然后接着检查外层查询中O的第二个元组,重复这一过程,知道O表全部检查完毕为止。
第四种写法,使用存在量词的嵌套查询:
select xq,kh,sksj from O
where exists(select * from T where xm='马小红' and O.gh=T.gh );
这里的exists即为存在量词,若内层查询结果非空,则外层查询的where后面的条件为真。在本例中,对于O中的每一个元组,只要其教师为‘马小红’,则表示该元组是满足条件的元组,放入结果表中。
最后附上输出的结果:
2. 检索有学生重修的教师编号和姓名。
所需要的表 学生表S如下:
选课表E如下:
首先需要理解题目的含义,需要输出的有学生重修的教师编号和姓名,第一,学生重修怎么表示?很简单,就是同一个学生,选了不同学期的同一门课,那就表示,该学生重修了。那么输出哪一次课的教师编号和工号呢?根据题意,有学生重修,也就意味着要输出该生最后一次上这门重修课的时候的任课教师编号。那么题目就理解清楚了,代码如下:
select X.gh,T.xm from S,T,E as X,E as Y
where X.gh=T.gh and S.xh=X.xh and X.xh=Y.xh and X.kh=Y.kh and Y.xq<X.xq;
这里的查询用到了三张表,分别是学生表,教师表(在题1中)和选课表。由于需要对选课表E进行重复查询,所以引入2个元组变量X和Y,在语句中应用元素变量对列名进行限定。我们来看where子句中的条件,首先是X表(也就是E表)和T的联结操作,用来输出的,没什么好解释;接着是S.xh=X.xh,这是联结操作,也不用解释
;然后是 X.xh=Y.xh
,作用是限定同一名学生,因为要重修,肯定是同一名同学所为;X.kh=Y.kh
也就是意味着选了同一门课,也就是重修;最后 Y.xq<X.xq
也就是需要选择该生最后一次上这门课的学期,用于找到这门课的任课教师。
最后的结果表也很简单:
3. 如果O表加一个个开课编号(标识码)会带来哪些影响(优缺点)?
表如下:
表中可以看出,课号和教师的工号是表的外键,加一个开课编号的含义是,添加一个唯一的编号,成为该表的主键,来指向这些在不同学期开设的不同课程。
优点: 在添加开课编号后,开课编号即为该表的主键,那么在选课表中的排序会更加容易。
选课表中的学期,课号和教师工号均可以用O中的开课编号唯一表示,可以大大节省数据的存储空间。缺点:
这样一来,选课表中学生选课的学期,课号和教师工号都被开课编号代替,那么在搜索这些信息的时候,需要关联选课表和开课表两张表,使得搜索过程变得复杂。
以上是研讨2的全部内容。
【数据库课程】研讨02相关推荐
- mysql中 课程1比课程2成绩高_小菜菜mysql练习解读分析1——查询 01 课程比 02 课程成绩高的学生的信息及课程分数...
查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 好的,第一道题,刚开始做,就栽了个跟头,爽歪歪,至于怎么栽跟头的 --需要分析题目,查询的是 ...
- php咖啡管理系统论文,数据库课程设计--“茶咖啡”销售管理系统总结
为期一周的数据库课程设计终于完工, 总结一些经验和教训.发现基础的知识还是要时刻记在心中,知识不基础,何谈去开发?因为做什么东西都首先要一定的目标,计划,以及做到东西要做到那个程度,这方面一点要先在脑 ...
- 查询同时选修了01课程和02课程的学生信息及相关课程成绩
要查询同时选修了"01"课程和"02"课程的学生信息及相关课程成绩,需要进行以下步骤: 查询选修了"01"课程的学生信息,得到这些学生的学号 ...
- MYSQL:餐厅点菜、管理员工的数据库。大学数据库课程大作业(初学者,入门,用的基础知识)
mysql数据库:点餐系统和管理员工的数据库 大二做的数据库课程大作业,作者是初学者,分享给大家参考,内容参考了很多篇数据库文章才拼凑出来,所以本数据库很粗糙,很简单,需要的同学复制粘贴然后自行修改交 ...
- mysql中 课程1比课程2成绩高_小菜菜mysql练习解读分析1——查询 01 课程比 02 课程成绩高的学生的信息及课程分数......
查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 好的,第一道题,刚开始做,就栽了个跟头,爽歪歪,至于怎么栽跟头的 --需要分析题目,查询的是 ...
- 14c语言课程设计题目,2011级数据库课程设计任务书
2011级数据库课程设计任务书 [设计目的] 数据库课程设计是在学生系统地学习了<数据库系统原理>课程后,按照关系型数据库 的基本原理,综合运用所学的知识,设计开发一个小型的数据库管理信息 ...
- ADO.NET的数据库查询2009-12-07 02:20 P.M.ADO.NET的数据库查询
ADO.NET的数据库查询 2009-12-07 02:20 P.M. ADO.NET的数据库查询 一.SqlCommand对象 1:创建SqlCommand对象 l 使用New关键字 ...
- oracle 慕课课程_“慕课”在Oracle数据库课程中的应用探讨
[摘 要] 在分析近年来集宁师范学院Oracle数据库课程教学现状."慕课"教学模式优势的基础上,探讨了通过在线平台引入"慕课"进行混合式教学的教学方法,实现翻 ...
- 数据库课程设计结论_结论
数据库课程设计结论 Living in the Pacific Northwest, the intertwined issues of salmon survival and river flow ...
- 学生机房管理服务器系统设计,广东工业大学数据库课程设计机房管理系统设计...
<广东工业大学数据库课程设计机房管理系统设计>由会员分享,可在线阅读,更多相关<广东工业大学数据库课程设计机房管理系统设计(27页珍藏版)>请在人人文库网上搜索. 1.课程设计 ...
最新文章
- AE 各分析适用数据
- 初识 RESTful API规范
- GDCM:MD5的测试程序
- Ubuntu中用gedit保存文件失败的解决办法
- HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)
- 深度学习笔记(4) 浅层神经网络
- 的input最大长度_LeetCode 84 | 单调栈解决最大矩形问题
- 无人机送货新方式?只为解决“最后一公里”
- Windows下sqlmap安装方法
- 用户故事(二):为什么要使用用户故事表达需求?
- NCIE(国家网络工程师认证)
- AWS云lamda实时判断IoTCore上传的数据并插入RDS中
- VS加载DLL报---找不到指定的模块(126)
- Requests库爬虫详解
- 惠普暗影精灵键盘灯怎么开
- 阿里云服务器ECS和独享虚拟主机、轻量应用服务器如何选择
- HBase在滴滴出行的应用场景和最佳实践
- 用Google Analytics监控营销邮件打开率
- 仿腾讯手机管家快捷中心功能的实现方案
- 微信小程序之实现一键退出(挂起)小程序以及如何去除 view/navigator 点击后默认阴影效果