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

目录

第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;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROS基础知识复习

【置顶】感谢参考:https://zhuanlan.zhihu.com/p/662074088 0.背景 工作一年多没有做 ROS 相关的开发了,最近找工作想做回这一块来,根据参考内容,抽时间给这边的基础知识敲一遍复习一下 1.环境检查 打开了之前的笔记本&#x…

mysql讲解2 之事务 索引 以及权限等

系列文章目录 mysql 讲解一 博客链接 点击此处即可 文章目录 系列文章目录一、事务1.1 事务的四个原则1.2 脏读 不可重复读 幻读 二、索引三,数据库用户管理四、mysql备份 一、事务 1.1 事务的四个原则 什么是事务 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQ…

webpack提升构建速度

目录 配置优化减少 resolve 的解析把 loader 应用的文件范围缩小减少 plugin 的消耗选择合适的 devtool 使用工具thread-loaderDLLPlugin 流程优化拆分构建步骤拆分项目代码 版本更新总结 前端项目随着时间推移和业务发展,页面可能会越来越多,或者功能和…

什么是安全平行切面

安全平行切面的定义 通过嵌入在端—管—云内部的各层次切点,使得安全管控与业务逻辑解耦,并通过标准化的接口为安全业务提供内视和干预能力的安全基础设施。安全平行切面是一种创新的安全体系思想,是实现“原生安全”的一条可行路径。 为什…

分类预测 | Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测

分类预测 | Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测 目录 分类预测 | Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-LSTM粒子群算法优化长短…

下载并安装DevEco Studio 3.1,初尝鸿蒙编程

摘自华为官网 DevEco Studio 3.1配套支持HarmonyOS 3.1版本及以上的应用及服务开发,提供了代码智能编辑、低代码开发、双向预览等功能,以及轻量构建工具DevEco Hvigor 、本地模拟器,持续提升应用及服务开发效率。 下载 官网下载地址 HUAWEI…

用python将csv表格数据做成热力图

python的开发者为处理表格和画图提供了库的支持,使用pandas库可以轻松完成对csv文件的读写操作,使用matplotlib库提供了画热力图的各种方法。实现这个功能首先需要读出csv数,然后设置自定义色条的各种属性如颜色,位置,…

19、Flink 的Table API 和 SQL 中的自定义函数及示例(3)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

CoRL 2023 获奖论文公布,manipulation、强化学习等主题成热门

今年大模型及具身智能领域有了非常多的突破性进展,作为机器人学与机器学习交叉领域的全球顶级学术会议之一,CoRL也得到了更多的关注。 CoRL 是面向机器人学习的顶会,涵盖机器人学、机器学习和控制等多个主题,包括理论与应用。今年…

初探地理编码(2023.11.12)

地理编码相识 2023.11.12 引言1、地理编码简介2、地理编码API和服务(解决方案供应商 / 厂商)2.1 高德2.2 百度2.3 超图2.4 天地图2.5 ArcGIS2.6 MapBox2.7 Cesium2.8 MapLocation 3、python实例3.1 pip安装依赖库(python 3.6)3.2 …

MVVM框架:图片加载有问题

一、前言:在我使用ImageView加载图片的时候添加如下代码发现报错 app:imageUrl"{viewModel.observableField.assetImg}"报错如下错误 二、原因:是啥我不太清楚好像是没有imageView的适配器,后来我看了一下确实没有 public class I…

AD9371 Crossbar 和 I、Q数据 映射JESD204B传输层

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…

linux 安装 mini conda,linux下安装 Miniconda

下载地址 https://docs.conda.io/projects/miniconda/en/latest/index.html 安装conda mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/mini…

微信开发者工具如何使用

首先是下载微信开发者工具 链接: https://pan.baidu.com/s/1ri-fRCUQsz9vLxbTqtdPUQ 提取码: 8rhn 复制这段内容后打开百度网盘手机App,操作更方便哦 安装完打开就是以下界面 接下来进入正题 第一步新建或导入 新建 获取AppID 第一步:通过微信公众平…

第12章 PyTorch图像分割代码框架-3:推理与部署

推理模块 模型训练完成后,需要单独再写一个推理模块来供用户测试或者使用,该模块可以命名为test.py或者inference.py,导入训练好的模型文件和待测试的图像,输出该图像的分割结果。inference.py主体部分如代码11-7所示。 代码11-7 …

vue做的一个一点就转的转盘(音乐磁盘),点击停止时会在几秒内缓慢停止,再次点击按钮可以再次旋转,

先看效果&#xff1a; 代码&#xff1a;主要部分我会红线画出来 css:部分&#xff1a; 源码&#xff1a; vue部分&#xff1a; <template><div class"song-lyric"><div><div class"type"><div class"right">&l…

如何用自然语言 5 分钟构建个人知识库应用?我的 GPTs builder 尝试

开发者的想象力闸门一旦打开&#xff0c;迎接我们的必然是目不暇接的 AI 应用浪潮冲击。 兴奋 早晨&#xff0c;我突然发现 ChatGPT 最新的 Create GPTs 功能可以用了。 这太让我意外了&#xff0c;没想到这么快。根据页面上的提示&#xff0c;我一直以为还得等上一周左右。于是…

3C制造RFID产线智能化升级改造设计方案

3C行业需求 近年来&#xff0c;随着政策的支持、相关技术的进步以及市场需求的推动&#xff0c;3C行业迅速发展&#xff0c;我国的3C市场已经进入了稳定发展阶段&#xff0c;作为仅次于汽车产业的大市场&#xff0c;3C产业在智能制造的推动下&#xff0c;越来越多的物联网技术…

软考网络工程师知识点总结(四)

目录 61、FTP文件传输服务 62、DHCP动态主机配置协议 63、电子邮件服务 64、各种新技术相关概念及功能的考查 65、Windows的ipconfig命令 66、Windows的其它命令及说明 67、Linux系统关机和重启命令 68、Linux系统文件属性命令 69、SNMP协议版本 70、SNMP协议的报文类…

【OpenCV(3)】linux arm aarch 是 opencv 交叉编译与使用

文章目录 1、直接找github 别人编译好的2、自主编译参考 3使用CMake检查 参考 1、直接找github 别人编译好的 测试很多&#xff0c;找到一个可用的。 https://github.com/dog-qiuqiu/libopencv 它用了超级模块&#xff01; OpenCV的world模块也称为超级模块&#xff08;supe…