头歌数据库课程实验(子查询)
以下给出teachingdb的所有表以及内容:
course:
cno cname ctime credit
001 数学分析 64 4.0
002 普通物理 64 4.0
003 微机原理 56 3.5
004 数据结构 64 4.0
005 操作系统 56 3.5
006 数据库原理 56 3.5
007 编译原理 48 3.0
008 程序设计 32 2.0
-----------------------------------------------------------------------------------------
score:
sno cno tno grade
96001 001 052503 77.5
96001 002 052504 85.0
96001 003 052501 89.0
96001 004 052502 86.0
96001 005 052505 82.0
96001 006 052505 75.0
96001 007 052506 55.0
96001 008 052507 90.0
96002 001 052504 88.0
96002 003 052502 92.5
96002 006 052507 90.0
96003 001 052504 69.0
96003 003 052501 91.0
96004 001 052503 87.0
96005 004 052502 92.0
96005 005 052505 90.0
96005 006 052505 89.0
96005 007 052507 78.0
97001 001 052504 96.0
97001 008 052505 95.0
97002 003 052502 91.0
97002 004 052505 NULL
97002 006 052507 92.0
97004 005 052502 90.0
97004 006 052501 85.0
-----------------------------------------------------------------------------------------
student:
sno sname sdept sclass ssex birthday totalcredit
96001 马小燕 计算机 01 女 2000-01-02 0.0
96002 黎明 计算机 01 男 2000-03-05 0.0
96003 刘东明 数学 01 男 2000-10-05 0.0
96004 赵志勇 信息 02 男 2000-08-08 0.0
96005 司马志明 计算机 02 男 2001-11-23 0.0
97001 马蓉 数学 02 女 2001-03-04 0.0
97002 李成功 计算机 01 男 2001-09-10 0.0
97003 黎明 信息 03 女 2002-02-08 0.0
97004 李丽 计算机 02 女 2002-01-05 0.0
-----------------------------------------------------------------------------------------
teach:
tno tname tsex tdept
052501 王成刚 男 计算机
052502 李正科 男 计算机
052503 严敏 女 数学
052504 赵高 男 数学
052505 刘玉兰 女 计算机
052506 王成刚 男 信息
052507 马悦 女 计算机
第1关:标量子查询
任务描述
本关任务:使用不相关子查询求年龄大于'刘东明' 的所有学生的姓名与出生日期。
相关知识
为了完成本关任务,你需要掌握:
1.什么叫子查询,
2.比较运算符结合标量子查询的使用。
子查询
子查询是指出现在其他SQL语句内的SELECT子句。
例如:
SELECT * FROM t1 WHERE col1=(SELECT col2 FROM t2);
子查询指嵌套在查询内部,且必须始终出现在圆括号内,子查询可以分为四类:
标量子查询:返回单一值的标量,最简单的形式;
列子查询:返回的结果集是 N 行一列;
行子查询:返回的结果集是一行 N 列;
表子查询:返回的结果集是 N 行 N 列。
编程要求
在右侧编辑器补充代码,使用不相关子查询求年龄大于'刘东明' 的所有学生的姓名与出生日期。
测试说明
编写代码后,点击测评即可。
开始你的任务吧,祝你成功!
use teachingdb;
select sname, birthday from student
where birthday < (select birthday from student where sname = '刘东明');
第2关:列子查询([not] in)
任务描述
本关任务:求未选修任何课程的学生的学号和姓名。
相关知识
列子查询是指子查询返回为一列多行的集合。本例中先考虑使用子查询将选修课程学生的学号返回,使用外部查询判断哪个学生的学号不在这个集合,返回其学号和姓名。
编程要求
根据提示,在右侧编辑器补充代码,求未选修任何课程的学生的学号和姓名。
测试说明
编写代码后,点击测评即可。
开始你的任务吧,祝你成功!
use teachingdb;
select sno, sname from student
where sno not in (select sno from score);
第3关:列子查询(any/all)
任务描述
本关任务:求比数学系中全体学生年龄大的学生的姓名和系
相关知识
列子查询中,当某字段与列子查询返回的集合进行比较运算时,要用比较运算符+any/all,也可以在子查询中使用MAX()和MIN()函数。
编程要求
根据提示,在右侧编辑器补充代码,求比数学系中全体学生年龄大的学生的姓名和系。
测试说明
编写代码后,点击测评即可。
开始你的任务吧,祝你成功!
use teachingdb;
select sname, sdept, birthday from student
where birthday < all(select birthday from student where sdept = '数学');
第4关:相关子查询(exists)
任务描述
本关任务:求选修了004课程的学生的姓名和系。
相关知识
相关子查询是指查询条件依赖于父查询的查询,相交子查询一般使用EXISTS关键字。
编程要求
根据提示,在右侧编辑器补充代码,求选修了004课程的学生的姓名和系。
测试说明
编写代码后,点击测评即可。
开始你的任务吧,祝你成功!
use teachingdb;
select sname, sdept from student
where sno in (select sno from score where cno = 004);
第5关:相关子查询(not exists+表子查询)
任务描述
本关任务:求选修了'刘东明' 同学选修的全部课程的学生的学号。
相关知识
本任务要实现一个除法运算,要完成本任务要用到两个知识点:
(1)相关子查询中使用否定(not exists)之否定(not exists)实现除法运算;
(2) 用表子查询返回刘东明同学选修的全部课程
编程要求
在右侧窗口补充代码,求选修了'刘东明' 同学选修的全部课程的学生的学号。
测试说明
编写代码后,点击测评即可。
开始你的任务吧,祝你成功!
use teachingdb;
select sno from score
where cno in
(
select cno from score
where sno =
(
select sno from student
where sname = '刘东明'
)
)
and score.sno !=
(
select sno from student
where sname = '刘东明'
)
group by sno having count(cno) >= 2;
第6关: 相关子查询(not exists)
任务描述
本关任务:求选修了全部课程的学生的学号。
相关知识
相关子查询中使用否定(not exists)之否定(not exists)实现除法运算。
编程要求
根据提示,在右侧编辑器补充代码, 求选修了全部课程的学生的学号。
测试说明
开始你的任务吧,祝你成功!
use teachingdb;
select sno from score
group by sno
having count(cno) =
(select count(*) from course);
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)