What’s more

山东大学 2020级数据库系统 实验一
山东大学 2020级数据库系统 实验二
山东大学 2020级数据库系统 实验三
山东大学 2020级数据库系统 实验四
山东大学 2020级数据库系统 实验五
山东大学 2020级数据库系统 实验六
山东大学 2020级数据库系统 实验七
山东大学 2020级数据库系统 实验八、九

写在前面

做数据库实验一定要静得下心来,才能发现其中的错误然后进行改正。同时,如果发现 SQL 语句总是报错,“一定是你错了,只是不知道错在哪里!”

其次,SQL 语句中较为复杂的点博主都进行了注释,希望大家一定要看懂思路后自己写一遍,而不是盲目的 Ctrl+C,Ctrl+V,切记切记!!

实验六

实验六相较于之前的实验难度稍微低一些,但也需要了解视图和表的区别之后,做题会更加得心应手。考察的主要是查询语句,在之前的实验中想必应该非常熟悉了……

  • 6-1 例如:找出年龄小于20岁的所有学生的学号、姓名、年龄
    正确执行:create view test6_00 as select sid,name,age from pub.student where age>20
    Oracle扩展后方便写法:
    create or replace view test6_00 as select sid,name,age from pub.student where age>20
    直行select count(*) from test6_00 检查是否能够5分钟内查询出全部结果,如果超时说明可能有错误,这种情况下严禁执行"update dbtest set test=6"进行交卷。
    找出年龄小于20岁且是"物理学院"的学生的学号、姓名、院系名称,按学号排序

    思路:

    1. 在 pub.student 中找到对应的属性值即可;
    2. 注意最后加上 order by sid;
create view test6_01 asselect sid, name, dnamefrom pub.studentwhere age < 20and sid in(select sidfrom pub.student_coursewhere dname = '物理学院')order by sid
  • 6-2 查询统计2009级、软件学院每个学生的学号、姓名、总成绩(列名sum_score)(如果有学生没有选一门课,则总成绩为空值)
    思路:

    1. 先找到满足条件的学生的 sid, name;
    2. 由于有学生没有选一门课,但是这个学生也要计算在内,因此使用 natural left outer join 来进行连接;
    3. 找到对应的总成绩,然后连接即可;
create view test6_02 asselect sid, name, sum_scorefrom (select distinct sid, namefrom pub.studentwhere class = '2009'and dname = '软件学院') natural left outer join(select distinct sid, sum(score) sum_scorefrom pub.student_coursegroup by sid)
  • 6-3 查询2010级、计算机科学与技术学院、操作系统的学生成绩表,内容有学号、姓名、成绩。
    思路:

    1. 根据条件进行查询即可;
create view test6_03 asselect sid, name, scorefrom pub.student natural join pub.student_coursewhere class = '2010'and dname = '计算机科学与技术学院'and cid = (select cid from pub.course where name = '操作系统')
  • 6-4 找出选修"数据库系统"课程,且成绩大于90的学生的学号、姓名。
    思路:

    1. 根据条件进行查询即可;
    2. 可以将两张表进行自然连接;
create view test6_04 asselect sid, namefrom pub.student natural join pub.student_coursewhere cid = (select cid from pub.course where name = '数据库系统')and score > 90
  • 6-5 找出姓名叫"李龙"的学生的学号及其选修全部课程的课程号、课程名和成绩。
    思路:

    1. 名为“李龙”的同学可以不只一个哦!!
    2. 将两张表进行自然连接后查询出满足条件的元素即可;
create view test6_05 asselect sid, cid, name, scorefrom pub.student_course natural join pub.coursewhere sid in (select distinct sid from pub.student where name = '李龙')
  • 6-6 找出选修了所有课程的学生的学号、姓名。
    思路:

    1. 使用存在性检测:not exists … except(minus) … 来对所有课程和学生选课进行检验即可;
create view test6_06 asselect distinct sid, namefrom pub.student Swhere not exists((select cidfrom pub.course)minus(select cidfrom pub.student_course Twhere S.sid = T.sid))
  • 6-7 找出选修了所有课程并且每门课程每次考试成绩均及格的学生的学号、姓名。(题6的延伸和巩固)
    思路:

    1. 同样可以使用存在性检测先得出选修了所有课程的学生的 sid, name;
    2. 然后添加条件 where score > 60即可;

    注意:这里的不及格指的是只要有一次考试不及格就不计入!!!

create view test6_07 asselect distinct sid, namefrom pub.student Swhere not exists((select cidfrom pub.course)minus(select cidfrom pub.student_course Twhere S.sid = T.sid))and sid not in(select sidfrom pub.student_coursewhere score < 60)
  • 6-8 找出选修了所有课程并且得到所有课程的学分(即每门课程最少一次考试及格)的学生的学号、姓名。(题6的 延伸和巩固)。
    思路:

    1. 首先还是使用存在性检测得出选修了所有课程的学生的 sid, name;
    2. “最少一次考试及格” 的反面为 “全都不及格”,因此将这些最大值不及格的学生去掉即可;
create view test6_08 asselect distinct sid, namefrom pub.student Swhere not exists((select cidfrom pub.course)minus(select cidfrom pub.student_course Twhere S.sid = T.sid))and sid not in(select sidfrom (select distinct sid, cid, max(score) max_scorefrom pub.student_coursegroup by sid, cid)where max_score < 60)
  • 6-9 查询统计2010级、化学与化工学院的学生总学分表,内容有学号、姓名、总学分sum_credit。
    思路:

    1. 第一步求出满足条件的学生的 sid, name;
    2. 第二步利用之前的方法去求出学生的总学分;(注意最大值 > 60 即计入学分哦!!)
create view test6_09 asselect t0.sid, t0.name, t1.sum_creditfrom (select distinct sid, namefrom pub.studentwhere class = '2010'and dname = '化学与化工学院') t0,(select distinct sid, sum(credit) sum_creditfrom (select distinct sid, cid, max(score) max_scorefrom pub.student_coursegroup by sid, cid) natural join pub.coursewhere max_score >= 60group by sid)t1where t0.sid = t1.sid
  • 6-10 找出有间接先行课的所有课程的课程号、课程名称。
    Tips:所谓间接先行课:某一门课程 A 的先行课 B 的先行课 C,因此 C 就是 A 的间接先行课;
    思路:

    1. 利用存在性检测 exists 即可;
    2. where 条件中均为 fcid 和 cid 的比较;
create view test6_10 as
select cid, name
from pub.course t0
where exists(select cidfrom pub.course t1where t0.fcid = t1.cid
and exists(select cidfrom pub.course t2where t1.fcid = t2.cid))

再次强调:一定是看懂思路之后自己实践哈~~
有问题还请斧正!

山东大学 2020级数据库系统 实验六相关推荐

  1. 山东大学 2020级数据库系统 实验八、九

    What's more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 202 ...

  2. 山东大学 2020级数据库系统 实验七

    What's more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 202 ...

  3. 山东大学 2020级数据库系统 实验五

    What's more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 202 ...

  4. 山东大学 2020级数据库系统 实验四

    What's more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 202 ...

  5. 山东大学 2020级数据库系统 实验三

    What's more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 202 ...

  6. 山东大学 2020级数据库系统 实验二

    What's more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 202 ...

  7. 山东大学 2020级数据库系统 实验一

    What's more? 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 20 ...

  8. 山东大学高频电子线路实验六 频率调制及鉴频实验详解

    目录 一.频率调制实验 [实验目的] [实验设备] [实验原理] [实际实验分析] 1)实验准备 2)测量Cj-v特性.静态频率调制特性和频率调制灵敏度 3)观察调频信号的波形 一.乘积型相位鉴频器实 ...

  9. 山东大学 2020级计算机系统原理——拆解二进制炸弹

    写在前面 第一次拿到这个实验还是有点慌!之前没见过,不过还是慢慢做过来了. 这是个需要耐心的过程,请一定静下心来哦! 环境及配置 环境:Ubuntu 20.04 + GDB 调试工具 可参考配置:GD ...

最新文章

  1. 物联网与边缘计算的融合
  2. hdu6438 Buy and Resell 买卖物品 ccpc网络赛 贪心
  3. FreeRTOS知识点
  4. 使用secondary sort实现数据关联 完整示例代码
  5. 阿里研究员谷朴:API 设计最佳实践的思考
  6. Sql Server系列:存储过程
  7. 在ASP.Net Core和JAVA中,使用Azure配置密钥——Key Vault
  8. Iterator作用
  9. 一、python基本语法元素(温度转换)
  10. 50道编程小题目之【质数的个数】
  11. matlab 轴gui,MatlabüGUI学习笔记(4)——公共对象属性的轴,MatlabGUI,四,常用,之,Axes...
  12. 架构分享--微博架构的回顾
  13. android timepicker分割线颜色,关于Android的TimePicker和DatePicker一些简单的使用问题
  14. open cv+C++错误及经验总结(三)
  15. Java8 in action(1) 通过行为参数化传递代码--lambda代替策略模式
  16. Android学习之Activity生命周期
  17. 一次完整的 Http 请求过程
  18. 不属于计算机网络性能指标的是,数据传输速率是计算机网络的一项重要性能指标,下面不属于计算机网络数据传输常用单位的是_______。...
  19. VR全景:三维电商势不可挡
  20. 如何在html中引入代码,如何在HTML页面引入javaScript代码

热门文章

  1. 少儿故事:小乌鸦智斗老鹰
  2. Python数据结构与算法(二)--timeit模块
  3. 老毛桃U盘快速装系统
  4. linux如何挂载nfs目录,linux – NFS导出已经挂载NFS的目录(在服务器上)
  5. java如何将String转换为enum
  6. 学习Spring Boot:(八)Mybatis使用分页插件PageHelper
  7. 孩子学计算机最佳年龄,孩子学编程最佳年龄是多少
  8. python代码html显示数据_通过AJAX success方法以html格式显示数据
  9. 寄生虫php版,-PHP版SEO最新教材版排名DeDeCms寄生虫V90繁殖
  10. mybatis 取查询值_MyBatis-SELECT基本查询