(头哥)多表查询与子查询

目录

第1关:查询每个学生的选修的课程信息

第2关:查询选修了“数据结构”课程的学生名单

第3关:查询“数据结构”课程的学生成绩单

第4关:查询每门课程的选课人数

第5关:查询没有选课的学生信息

第6关:查询学生所学课程平均分超过80分的学生信息

第7关:找出每个学生超过他所有的选修课程的平均成绩的课程

第8关:查询“程序设计基础”课程成绩最高的学生信息

第9关:查询每个同学的总学分


第1关:查询每个学生的选修的课程信息

任务描述:

本关任务:查询每个学生的选修的课程信息,显示sno、sn、cn、ct,并按ct降序排列

分析:sno、sn在学生表(s)中,cn、ct在课程表(c)中,因此我们要将这两张表连接起来,但由于这两张表无直接联系,因此我们需要通过选修表(sc)将s表和c表连接起来。我们可以使用内连接,将这三张表(s、sc、c)连接起来,s与sc的连接条件为:s.sno=sc.sno,sc与c的连接条件为:sc.cno=c.cno

内连接:

select 字段1, 字段2,... from 表1 inner join 表2 on 连接条件;

select 字段1, 字段2,... from 表1, 表2 where 连接条件;

题解: 

select s.sno, s.sn, c.cn, c.ct from s 
 inner join sc on s.sno = sc.sno 
 inner join c on sc.cno = c.cno 
 order by c.ct desc;

第2关:查询选修了“数据结构”课程的学生名单

本关任务:查询选修了“数据结构”课程的学生名单,显示sno、sn,按学号升序排序

分析:sno、sn在学生表(s)中,题目要求查询选修了“数据结构”的学生名单,因此我们要查询楚“数据结构”的课程号(使用子查询),再通过课程号找到选修了“数据结构”的学生学号(在sc表中查询选修课程为“数据结构”课程号的学生),从而查询出选修了“数据结构”课程的学生名单

题解:

 select s.sno,s.sn from s inner join sc on s.sno = sc.sno 
 where sc.cno = (select cno from c where cn = '数据结构') 
 order by s.sno;

第3关:查询“数据结构”课程的学生成绩单

本关任务:查询“数据结构”课程的学生成绩单,显示sno、sn、score,按成绩降序排列

分析:本关与第2关类似,先查询出“数据结构”的课程号,即可通过课程号查询出学生的学号、分数、姓名

题解:

 select s.sno, s.sn, sc.score from s inner join sc on s.sno=sc.sno 
 where sc.cno = (select cno from c where cn = '数据结构') 
 order by sc.score desc;

第4关:查询每门课程的选课人数

本关任务:查询每门课程的选课人数,以中文显示课程号、课程名称、选课人数,没有学生选的课程也要显示,按课程号升序排列。

分析:统计选课人数,则需要使用聚合函数(count()),而任务要求查询每门课程的选课人数,则需要使用分组查询,分组的依据为课程号,且题目还要求没有学生选的课程也要显示,因此我们不能使用内连接来查询,而要使用外连接

外连接:

左外连接:select 字段 from 表1 left outer join 表2 on 连接条件;

右外连接:select 字段 from 表1 right outer join 表2 on 连接条件;

题解:

select c.cno as '课程号',c.cn as '课程名称',count(s.sno) as '选课人数' 
from c left outer join sc on c.cno=sc.cno 
left outer join s on s.sno=sc.sno 
group by c.cno;

第5关:查询没有选课的学生信息

本关任务:查询没有选课的学生信息,显示sno、sn,按学号升序排列

分析:若学生没有选课,则选修表(sc)中cno为空或是sc中无该学生选课信息,因此,我们可以使用左外连接查询出这些没有选课的学生

题解:

select s.sno,s.sn from s left outer join sc on s.sno=sc.sno 
 where sc.cno is null; 

第6关:查询学生所学课程平均分超过80分的学生信息

本关任务:查询学生所学课程平均分超过80分的学生信息,以中文显示学号、姓名、平均成绩。按学号升序排列

分析:所学课程平均分需要使用聚合函数(avg()),而任务要求查询学生所学课程平均分超过80分的学生信息,因此需要使用分组查询分组条件为学号,由于平均分在分组之后计算出,因此需要使用having 来查询平均分超过80分的学生

题解:

select s.sno as '学号', s.sn as '姓名', avg(sc.score) as '平均成绩' 
from s inner join sc on s.sno=sc.sno group by sc.sno 
having avg(sc.score)>=80 
order by s.sno;

第7关:找出每个学生超过他所有的选修课程的平均成绩的课程

本关任务:找出每个学生超过他所有的选修课程的平均成绩的课程,显示sno、sn、cn、score,按sno和cn升序排列

分析:要找出每个学生超过他所有的选修课程的平均成绩的课程,我们首先要求出学生所选修课程的平均成绩,再找出其超出平均成绩的课程,因此我们可以使用自连接来查询学生超过他所有的选修课程的平均成绩的课程,再通过课程号查询该学生其他信息

题解:

select s.sno,s.sn,c.cn,sc.score 
from sc inner join s on sc.sno=s.sno 
inner join c on sc.cno=c.cno 
where sc.score >= (select avg(score) from sc as b where b.sno=sc.sno) order by s.sno,c.cn;

第8关:查询“程序设计基础”课程成绩最高的学生信息

本关任务:查询“程序设计基础”课程成绩最高的学生信息,显示sno、sn、score

分析:我们首先要找到“程序设计基础”课程中成绩最高的学生学号,使用聚合函数(max())找出选修课程为“程序设计基础”中成绩最高的学号,再查询学生信息

题解:

 select s.sno,s.sn,sc.score from s 
 inner join sc on s.sno=sc.sno 
 where sc.score = (select max(score) from sc inner join c on sc.cno=c.cno where c.cn='程序设计基础');

第9关:查询每个同学的总学分

本关任务:查询每个同学的总学分,成绩大于等于60才能拿到学分,以中文显示学号、姓名、总学分,以学号升序排列

分析:

要查询每个同学的总学分,其中也可能会有学分为0的情况,因此我们要使用外连接,由于只有成绩大于等于60才能拿到学分,因此我们在查询总学分时,要使用子查询,使用聚合函数(sum()),并通过条件 sc.score>=60查出总学分,由于要查询每个同学的总学分,因此需要使用分组查询,分组条件为学号

题解:

 select s.sno as '学号', s.sn as '姓名', 
  (select sum(c.credit) from sc inner join c on sc.cno=c.cno 
  where sc.score>=60 and sc.sno=s.sno) as '总学分' 
 from s left outer join sc on s.sno=sc.sno 
 left outer join c on sc.cno=c.cno 
 group by s.sno;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/136594.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Doris:读取Doris数据的N种方法

目录 1.MySQL Client 2.JDBC 3. 查询计划 4.Spark Doris Connector 5.Flink Doris Connector 1.MySQL Client Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris。登录到doris服务器后&a…

华为ensp:ospf动态路由

ip已配置好了 ,现在进入路由器去宣告网段 R1 进入系统视图 ospf 1 area 1 network 192.168.1.0 0.0.0.255 network 1.1.1.0 0.0.0.255 R2 进入系统视图 ospf 1area 1 network 1.1.1.0 0.0.0.255 quit area 0 network 192.168.2.0 0.0.0.255 network 2.2…

上机4KNN实验4

目录 编程实现 kNN 算法。一、步骤二、实现代码三、总结知识1、切片2、iloc方法3、归一化4、MinMaxScale()5、划分测试集、训练集6、KNN算法 .py 编程实现 kNN 算法。 1、读取excel表格存放的Iris数据集。该数据集有5列,其中前4列是条件属性…

[CISCN 2023 西南]do_you_like_read

打开题目,大概是一个购买书籍的网站,有登陆的功能 我们可以先分析下给的源码 在admin.php中会验证是否为admin用户 我们尝试爆破下密码,爆出来为admin123 登陆后发现存在文件上传漏洞 我们分析下源码 存在文件后缀检测,如果为p…

交换机工作原理

交换机工作原理 交换机功能:端口扩展(默认同一网络),如果只是两台设备进行通信,可以直接连接这两台设备而不用交换机,但如果设备较多,设备没有那么多接口,那么这个时候就需要交换机…

三分钟学完Git版本控制常用指令

基本指令 git clone [url] 克隆远程仓库到本地 git clone https://gitee.com/mayun2023a/mprpc.git2.git checkout -b xxx 切换至新分支xxx(相当于复制了remote的仓库到本地的xxx分支上) 3.修改或者添加本地代码(部署在硬盘的源文件上) 4.g…

Django配置文件,request,链接mysql方法,Orm简介

三板斧问题(views.py) HttpResponse # 返回的是字符串render # 渲染一个HTML静态文件,模板文件redirect # 重定向的 在视图文件中得视图函数必须要接收一个形参request,并且,视图函数也要有返回值&#xff…

着实不错的自适应大邻域搜索算法ALNS

文章目录 引言演进路线邻域搜索,NS变邻域搜素,VDNS大邻域搜索,LNS自适应大邻域搜索,ALNS 代码实现34个国内城市的TSP测试集XQF131 相关阅读 引言 之前介绍的差分进化算法和蚁群算法分别适用于求解连续优化问题和组合优化问题&…

【第五章】软件设计师 之 系统安全分析与设计

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 1、信息系统安全属性 2、对称加密与非对称加…

Redis五种数据类型及命令操作(二)

🎈个人公众号:🎈 :✨✨✨ 可为编程✨ 🍟🍟 🔑个人信条:🔑 知足知不足 有为有不为 为与不为皆为可为🌵 🍉本篇简介:🍉 本篇记录Redis五种数据类型及命令操作,如…

C语言--前置++与后置++

:自增1 注意区分前置和后置 前置:先,后使用 后置:先使用,后 --:自减1 注意区分前置和后置 前置:先-- ,后使用 后置,先使用,后-- int main() {int i 10;//int j i;//前置,先…

网络编程学习笔记

参考: 套接字通信部分 《TCP/IP 网络编程》以及《TCP/IP网络编程》学习笔记 socket 编程 1. 字节序 字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序,也就是说对于单字符来说是没有字节序问题的&…

如何使用PHPStudy本地快速搭建网站并实现远程访问

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

【第三章】软件设计师 之 数据库系统

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 1、数据库系统前言 2、三级模式 - 两级映射…

选购护眼台灯,全网都没有说清一个关键点!——照度均匀度

网上关于护眼台灯的选购推荐帖子多如牛毛,好台灯选购要点大体可归纳为以下五点: RG0无蓝光危害(豁免级蓝光危害,RG1为低蓝光危害、RG2、RG3分别为中度和高危危害) 无眩光,无可视频闪(不刺眼…

matlab 多自由度的车辆垂向振动模型 车辆平稳性研究

1、内容简介 略 17-可以交流、咨询、答疑 多自由度的车辆垂向振动模型 多自由度的车辆垂向振动模型,包含四分之一车体模型、半车模型和整车模型 垂向振动模型、四分之一车体模型、半车模型和整车模型 2、内容说明 略 3、仿真分析 略 4、参考论文 略 链接&…

内存映射:PS和PL DDR3的一些区别

之前写的一些资料: PS与PL互联与SCU以及PG082-CSDN博客 参考别人的资料: PL读写PS端DDR的设计_pl读写ps端ddr数据-CSDN博客 xilinx sdk、vitis查看地址_vitis如何查看microblazed地址_yang_wei_bk的博客-CSDN博客 可见,PS端的DDR3需要从…

git push origin masterEverything up-to-date

按住这个看一下很简单的问题,我在网上看了很多就是没找到能用的,最后找到了这个看起来写的很简单的一个文章,但他写的真的有用。 出现的问题 解决步骤

JavaScript逆向之Hook技术

Hook技术: 背景: ​ 在js逆向的过程种,当我们遇到加密参数,可以使用关键字全局搜素,跟栈,还有一种就是hook技术。跟栈就是比较麻烦,需要我们一个个找,hook技术就比较厉害了&#x…

【Linux】Kali(WSL)基本操作与网络安全入门

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍WSL安装Kali及基本操作。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路…