博客
关于我
数据库实验五--SQL的多层嵌套查询
阅读量:560 次
发布时间:2019-03-09

本文共 3149 字,大约阅读时间需要 10 分钟。

嵌套查询实例

以下是一系列基于不同表的嵌套查询实例,解析了学生表、教师表、课程表和成绩表之间的关系,并展示了如何通过嵌套查询解决实际问题。


1. 查询选修了3105和3245课程的学生姓名

查询语句:

SELECT sname FROM student WHERE sno IN (    SELECT sno FROM score s1, score s2     WHERE s1.cno = '3105' AND s2.cno = '3245' AND s1.sno = s2.sno)

解析:

通过连接score表,并使用WHERE子句筛选出同时选修课程号为3105和3245的学生,这些学生的学号将被返回,进而筛选出对应的学生姓名。


2. 查询被所有学生都选修的课程的任教教师名

查询语句:

SELECT tname FROM teacher WHERE tno IN (    SELECT tno FROM course WHERE cno IN (        SELECT cno FROM score         GROUP BY cno         HAVING count(sno) = 7    ))

解析:

首先,统计score表中每门课程的选修人数。GROUP BY cno按课程号分组,HAVING子句筛选出选修人数为7的课程号。然后,连接course表获取这些课程的教师编号tno,最终返回教师名称。


3. 查询选修了高等数学的学生姓名

查询语�句:

SELECT sname FROM student WHERE sno IN (    SELECT sno FROM score WHERE cno IN (        SELECT cno FROM course WHERE cname = '高等数学'    ))

解析:

通过先查询course表中名称为“高等数学”的课程,获取课程号后,进一步筛选score表中成绩记录的学生学号,最后返回对应的学生姓名。


4. 查询男教师所授课程的平均成绩

查询语句:

SELECT avg(grade) as 平均成绩 FROM score WHERE cno IN (    SELECT cno FROM teacher WHERE sex = '男')

解析:

首先筛选出teacher表中性别为“男”的教师编号tno,获取这些教师授课的课程号,最后计算对应课程的平均成绩。


5. 查询电子工程系教师所授课程中每门课程的最高分

查询语句:

SELECT max(grade) as 最高分 FROM score WHERE cno IN (    SELECT cno FROM course WHERE tno IN (        SELECT tno FROM teacher WHERE dept = '电子工程'    ))

解析:

通过链接teachercoursescore三表,筛选出属于“电子工程系”的教师授课课程号,最后返回这些课程的最高成绩。


6. 查询姓王的同学所选课程的任课教师名

查询语句:

SELECT tname FROM teacher WHERE tno IN (    SELECT tno FROM course WHERE cno IN (        SELECT cno FROM score WHERE sno IN (            SELECT sno FROM student WHERE sname LIKE '王%'        )    ))

解析:

首先筛选出姓“王”的学生学号,再根据学号获取他们选修的课程号,最后查出这些课程的任课教师名称。


7. 查询没有选修3245课程的学生姓名

查询语句:

SELECT sname FROM student WHERE sno NOT IN (    SELECT sno FROM score WHERE cno = '3245')

解析:

直接筛选出未选修课程号为3245的所有学生,并返回对应的学生姓名。


8. 查询助教所授课程中平均成绩在75分以上的选修人数

查询语句:

SELECT count(sno) as 选修人数 FROM score GROUP BY cno HAVING avg(grade) > 75 AND cno IN (    SELECT cno FROM course WHERE tno IN (        SELECT tno FROM teacher WHERE prof = '助教'    ))

解析:

首先筛选出助教授课的课程号,计算这些课程的平均成绩是否大于75分,GROUP BYHAVING结合使用后,筛选出满足条件的课程,并统计选修人数。


9. 查询选修了超过6个人选修的课程的任课教师职称

查询语句:

SELECT prof FROM teacher WHERE tno IN (    SELECT tno FROM course WHERE cno IN (        SELECT cno FROM score GROUP BY cno HAVING count(sno) > 6    ))

解析:

通过score表统计每门课程的选修人数,筛选出超过6个学生的课程号,再连接courseteacher表获取授课教师的职称。


10. 查询选修了超过3门课程的学生学号和姓名

查询语句:

SELECT sno, sname FROM student WHERE sno IN (    SELECT sno FROM score GROUP BY sno HAVING count(cno) > 3)

解析:

通过score表统计每个学生选修的课程数量,筛选出超过3门课程的学生学号,最后返回学号和对应的学生姓名。


11. 查询计算机系学生所选课程成绩中最高分课程的任课教师名

查询语句:

SELECT tname FROM teacher WHERE tno IN (    SELECT tno FROM course WHERE cno IN (        SELECT cno FROM score WHERE grade IN (            SELECT grade FROM score WHERE sno IN (                SELECT sno FROM student WHERE dept = '计算机'            )        )    ))

解析:

依次筛选出计算机系学生所选课程的成绩,之后确定成绩最高的课程号,再查出对应课程的任课教师名称。


12. 查询匡明同学所选课程的任课教师所在的系

查询语句:

SELECT dept FROM teacher WHERE tno IN (    SELECT tno FROM course WHERE cno IN (        SELECT cno FROM score WHERE sno IN (            SELECT sno FROM student WHERE sname = '匡明'        )    ))

解析:

通过学生学号获取成绩记录,进而查出选修课程号,再链接教师表获取课程的任课教师所在系。


以上查询均通过嵌套查询技术高效解决了实际问题,展示了复杂数据库查询的应用场景。每一条查询都通过合理的表连接和条件筛选,精准提取所需数据。

转载地址:http://gtppz.baihongyu.com/

你可能感兴趣的文章
LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)
查看>>
localhost:5000在MacOS V12(蒙特利)中不可用
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>
Moment.js常见用法总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>