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

目录

第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,一经查实,立即删除!

相关文章

大语言模型的关键技术(二)

一、Transformer 语言模型存在明显的扩展效应: 更大的模型/数据规模和更多的训练计算通常会导致模型能力的提升。 1、扩展效应的原因: 模型规模:增加模型的规模,即增加模型的参数数量和层数,通常会提高模型的表示能力…

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 流程优化拆分构建步骤拆分项目代码 版本更新总结 前端项目随着时间推移和业务发展,页面可能会越来越多,或者功能和…

什么是安全平行切面

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

Excel下载、Excel上传,邮件发送Excel并带Char图表

Excel上传 前段&#xff1a;ExportToExcel、UploadExcel <!-- 模态框 -文件下载上传 --><div class"modal"><div class"modal-content family"><span class"close" onclick"ModalClose(modal)"></span>…

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

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

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

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

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

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

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…

IDEA常用快捷键大全(详解)

如何在IDEA中进行内容全局查找 在idea中进行全局查找&#xff0c;可以使用快捷键“Ctrl Shift F”或者在菜单栏中选择Edit > Find > Find in Path。在弹出的界面中&#xff0c;输入要查找的内容。如果“Ctrl Shift F”这个快捷键无法实现全局查找&#xff0c;可以尝…

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

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

Python与ArcGIS系列(四)在地图文档中加入图层

目录 0 简述1 将图层添加到地图文档中2 将图层插入到地图文档0 简述 本篇介绍如何利用arcpy实现将图层添加到地图文档中,以及将图层插入到地图文档指定的位置。 1 将图层添加到地图文档中 arcpy的mapping模块提供的AddLayer()函数可以实现将图层添加到地图文档中。功能本质上…

初探地理编码(2023.11.12)

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

MVVM框架:图片加载有问题

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

Leetcode300 最长递增子序列

给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&#xf…

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

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

okhttp添加公共参数

在项目开发中很多时候后台都会给一些全局的公共入参&#xff0c;比如携带手机信息或者时间戳等字段。而我们在使用okhttp时&#xff0c;就需要我们单独就行二次封装处理了&#xff0c;对于请求全局参数&#xff0c;每次请求都要去写一次&#xff0c;那是肯定不行的。 所以就要我…

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…

3. 深度学习——损失函数

机器学习面试题汇总与解析——损失函数 本章讲解知识点 什么是损失函数?为什么要使用损失函数?详细讲解损失函数本专栏适合于Python已经入门的学生或人士,有一定的编程基础。 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。 本专栏针对面试题答案进行了优化…