关于外连接、内连接和子查询的使用(2)

news2024/10/5 15:51:56

目录

一. 前言

二. 使用外连接、内连接和子查询进行解答

三. 思维导图


一. 前言

        在前面我们对外连接、内连接和子查询的使用有了一些了解,今天我们将继续更深入的进行学习。(这里缺少的八个题目在博主的前面博客有解答,大家可以移步前面一篇博客)

二. 使用外连接、内连接和子查询进行解答

  • 09)查询学过「张三」老师授课的同学的信息
  1. 涉及表:t_mysql_course,t_mysql_student,t_mysql_teacher,t_mysql_score
  2. 表之间的关系:老师可以绑定课程,课程里面有分数,分数可以绑定学生
SELECT
	s.*,
	c.cname,
	t.tname,
	sc.score
FROM
	t_mysql_teacher t,
	t_mysql_student s,
	t_mysql_course c,
	t_mysql_score sc 
WHERE
	t.tid = c.tid 
	AND c.cid = sc.cid 
	AND sc.sid = s.sid 
	AND tname = '张三'

  • 10)查询没有学全所有课程的同学的信息
  1. 涉及表:t_mysql_student s ,t_mysql_score
  2. ① 统计一共有多少门学科
    ② 统计每个学生学了多少门 (不管有没有学都有(每个学生)--- 外联)
    ③ 做比较 
SELECT
	s.sid,
	s.sname,
	count( sc.score ) n 
FROM
	t_mysql_student s
	LEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
GROUP BY
	s.sid,
	s.sname 
HAVING
	n < (
	SELECT
		count(*) 
	FROM
		t_mysql_course 
	)

  • 11)查询没学过"张三"老师讲授的任一门课程的学生姓名
  1. 寻找张三老师教了那些课程

  2.  没学过:那么对应的课程就没有分数

  3. 使用 not in

  4. 重复了结果要使用分组

SELECT
	s.sid,
	s.sname 
FROM
	t_mysql_score sc,
	t_mysql_student s 
WHERE
	s.sid = sc.sid 
	AND sc.cid NOT IN 
    ( SELECT cid FROM t_mysql_course c, t_mysql_teacher t 
    WHERE c.tid = t.tid AND t.tname = '张三' ) 
GROUP BY
	s.sid,
	s.sname

  • 12)查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
  1. 涉及表:_mysql_student s, t_mysql_score sc 
SELECT
	s.sid,
	s.sname,
	count(sc.score) n,
	ROUND(avg( sc.score ),2)
FROM
	t_mysql_student s,
	t_mysql_score sc 
WHERE
	s.sid = sc.sid 
	AND sc.score < 60 
GROUP BY
	s.sid,
	s.sname
HAVING n>=2

 

  • 13)检索" 01 "课程分数小于 60,按分数降序排列的学生信息
  1. 涉及表:t_mysql_student s, t_mysql_score sc 
SELECT
	s.*,
	sc.score 
FROM
	t_mysql_student s,
	t_mysql_score sc 
WHERE
	s.sid = sc.sid 
	AND sc.cid = '01' 
	AND sc.score < 60 
ORDER BY
	sc.score DESC

  • 14)按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
  1. 平均 avg --- GROUP BY分组

  2. 从高到低 --- ORDER BY

  3. 所有学生的所有课程的成绩 --- 行转列

  4. 所有学生 --- 外联(所有)--- RIGHT JOIN右联

  5. 平均值取两位ROUND( AVG(sc.score) , 2 )

SELECT
	s.sid,
	s.sname,
	sum(( CASE WHEN sc.cid = '01' THEN sc.score END )) 语文,
	sum(( CASE WHEN sc.cid = '02' THEN sc.score END )) 数学,
	sum(( CASE WHEN sc.cid = '03' THEN sc.score END )) 英语,
	ROUND( AVG(sc.score) , 2 ) 平均分
FROM t_mysql_score sc
RIGHT JOIN t_mysql_student s 
	ON sc.sid = s.sid 
GROUP BY
	s.sid,
	s.sname
ORDER BY 平均分 DESC

  

推荐: 但是我们可以很明显的看到查询出来的数据有非常多的 null 值,十分不美观,那么我们可以试试 if 

  1. 如果cid等于 '01' ,那么就取分数,如果没有就取0(类似于三元运算符)
  2. sum( if( sc.cid = '01', sc.score, 0 )) 语文
SELECT
	s.sid,
	s.sname,
	sum( if( sc.cid = '01', sc.score, 0 )) 语文,
	sum( if( sc.cid = '02', sc.score, 0 )) 数学,
	sum( if( sc.cid = '03', sc.score, 0 )) 英语,
	ROUND( AVG(sc.score) , 2 ) 平均分
FROM t_mysql_score sc
RIGHT JOIN t_mysql_student s 
	ON sc.sid = s.sid 
GROUP BY
	s.sid,
	s.sname
ORDER BY 平均分 DESC

 

  • 15)查询各科成绩最高分、最低分和平均分:

        --- 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率,及格为:>=60,中等为:70-80,优良为:80-90,优秀为:>=90
        --- 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

  1. 无论有没有考试都要算成绩:left join --- 外联
  2. 最高分:max(),最低分:min(),平均分:avg()

  3. 统计及格率:及格人数÷总人数*100%

SELECT
	c.cid,
	c.cname,
	count(sc.sid) 人数,
	max(sc.score) 最高分,
	min(sc.score) 最低分,
	ROUND(avg(sc.score),2) 平均分,
	CONCAT(ROUND(sum(if(sc.score>=60,1,0))/(SELECT COUNT(1) 
	from t_mysql_student)*100 ,2),'%') 及格率,
	CONCAT(ROUND(sum(if(sc.score>=70 and sc.score<80,1,0))/(SELECT COUNT(1) 
	from t_mysql_student)*100 ,2),'%') 中等率,
	CONCAT(ROUND(sum(if(sc.score>=80 and sc.score<90,1,0))/(SELECT COUNT(1) 
	from t_mysql_student)*100 ,2),'%') 优良率,
	CONCAT(ROUND(sum(if(sc.score>=90,1,0))/(SELECT COUNT(1) 
	from t_mysql_student)*100 ,2),'%') 优秀率
FROM
	t_mysql_score sc
	LEFT JOIN t_mysql_course c ON sc.cid = c.cid 
GROUP BY
	c.cid,
	c.cname

三. 思维导图

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

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

相关文章

科技稳田心:地震频发,珈和科技领跑农险业务全流程

近日&#xff0c;日本能登半岛发生7.6级地震&#xff0c;13年以来首次触发“大海啸警报”。据估算&#xff0c;上一次的“3.11日本大地震”&#xff0c;导致了农林水产业损失约1200亿元。 自然灾害正严重影响着农业生产和可持续发展&#xff0c;提高农民抗风险能力&#xff0c…

知识图谱gds使用记录

安装 从下载站下载对应的包到plugin目录下&#xff0c;修改配置文件/etc/neo4j/neo4j.conf&#xff0c;末尾加入gds.*&#xff0c;重新启动 在浏览器输入CALL gds.list()命令进行测试 建立图映射 为了使用图算法&#xff0c;需要先将图数据库的内容映射为一个新图 如果是全…

国标GB28181视频监控EasyCVR平台:视频集中录制存储/云端录像功能及操作介绍

安防视频监控系统EasyCVR视频综合管理平台&#xff0c;采用了开放式的网络结构&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;同时还具备权限管理、设…

微信预约小程序制作指南:从小白到专家

在当今的数字时代&#xff0c;微信小程序已经成为了一种非常流行的应用方式。预约功能更是成为了许多小程序的核心功能之一。如果你也想为你的小程序添加预约功能&#xff0c;以下步骤将会对你有所帮助。 一、进入乔拓云网后台 乔拓云网是一个在线小程序开发平台&#xff0c;你…

熟悉HDFS常用操作

1. 利用Hadoop提供的Shell命令完成下列任务 (1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。 #检查文件是否存在./bin/hdfs dfs -test -e text.txt echo $? #结果是1 代表已存在 #根据结果判断出文件已存…

OpenHarmony自定义Launcher

前言 OpenHarmony源码版本:4.0release 开发板:DAYU / rk3568 DevEco Studio版本:4.0.0.600 自定义效果: 一、Launcher源码下载 Launcher源码地址:https://gitee.com/openharmony/applications_launcher 切换分支为OpenHarmony-4.0-Release,并下载源码 二、Launcher源…

[AutoSar]基础部分 RTE 08 runnable mapping

目录 关键词平台说明一、runnable mapping的必要性二、runnable mapping 通用规则三、Task type四、可以不用mapping的runnbale 关键词 嵌入式、C语言、autosar、runnable 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (…

动能芯片|DP1332E多协议高度集成非接触式读写芯片

DP1332E是一个高度集成的非接触读写芯片&#xff0c;它包含80C51微控制器内核&#xff0c;集成了13.56MHz下的各种主动/被动式非接触通信方法和协议。DP1332E有丰富的通讯接口和多协议集成优势&#xff0c;支持ISO/IEC18092,可以极大减少研发成本&#xff0c;高效、灵活的推动项…

铁威马使用小贴士,让NAS实现存储的旷野

结束2024年的第一个假期&#xff0c;我们忙着做年终总结&#xff0c;对来年许下希冀。 2023毋庸置疑是近年来过得较为丰富多彩的一年。 “看了好多场演唱会” “实现了一场说走就走的旅行” “蹦一场无拘无束的音乐节” “去见了很多很多好朋友” “去探索属于我人生的旷…

TS 36.213 V12.0.0-PUSCH相关过程(5)-UE PUSCH hopping过程

​本文的内容主要涉及TS 36.213&#xff0c;版本是C00&#xff0c;也就是V12.0.0。

国际版WPS Office18.6.0

​【应用名称】&#xff1a;WPS Office 【适用平台】&#xff1a;Android 【软件标签】&#xff1a;WPS 【应用版本】&#xff1a;18.5.4 → 18.6.0 【应用大小】&#xff1a;160MB 【软件说明】&#xff1a;WPS Office是使用人数最多的移动办公软件。它具有独有手机阅读…

Docker查看镜像的Dockerfile

前言 在使用Docker构建应用程序时&#xff0c;我们可以通过Dockerfile定义应用程序的环境&#xff0c;并将其打包成一个镜像。有时&#xff0c;我们可能需要查看一个已经构建好的镜像的Dockerfile&#xff0c;以了解镜像是如何构建的&#xff0c;或者进行后续的修改和调整。本…

【开源商城-MIT-PHP软件推荐】ShopXO企业级免费开源商城系统

ShopXO: ShopXO企业级免费开源商城系统&#xff0c;可视化DIY拖拽装修、包含PC、H5、多端小程序(微信支付宝百度头条&抖音QQ快手)、APP、多仓库、多商户、多门店、IM客服&#xff0c;进销存遵循MIT开源协议发布、基于ThinkPHP6框架研发 产品有社区版本和商业版 项目介绍 …

步入式汽车零件阳光模拟试验箱

汽车零件阳光模拟试验箱辐照光源采用金属卤素灯管&#xff0c;该产品按照其技术性能规定保证了光谱分布&#xff0c;非常适合运用在 汽车零件阳光模拟系统中。灯具的反光罩使用对称抛物面反射&#xff0c;以保证其高平行光束反射率。灯组由带有实际功率调节功能的电子电源&am…

C++11新特性(也称c++2.0)

目录 1.输出C版本&#xff1a;cout << __cplusplus << endl; 2.Uniform Initialization(一致性初始化) 3.initializer_list&#xff08;形参&#xff09; 4.explicit 5.for循环的新用法 6.default和delete 1.输出C版本&#xff1a;cout << __cplusplus…

Python selenium find_element()示例详解

selenium有以下定位方式&#xff1a; 1 2 3 4 5 6 7 8 driver.find_element_by_id(‘id) driver.find_element_by_xpath(xpath) driver.find_element_by_link_text(link_text) driver.find_element_by_partial_link_text(partial_link_text) driver.find_element_by_name(name…

Java中SpringBoot组件集成接入【Knife4j接口文档(swagger增强)】

Java中SpringBoot组件集成接入【Knife4j接口文档】 1.Knife4j介绍2.maven依赖3.配置类4.常用注解使用1.实体类及属性(@ApiModel和@ApiModelProperty)2.控制类及方法(@Api、@ApiOperation、@ApiImplicitParam、 @ApiResponses)3.@ApiOperationSupport注解未生效的解决方法5.…

联盛德-安全物联网芯片w800

联盛德-安全物联网芯片w800 前言一、w800简介&#xff1f;芯片外观 总结 前言 本文介绍w800的基本信息&#xff0c;详细规格&#xff0c;后续有时间会介绍如何适配openharmony的过程。 一、w800简介&#xff1f; W800 芯片是一款安全 IoT Wi-Fi/蓝牙 双模 SoC 芯片。支持 2.…

Tracert 与 Ping 程序设计与实现(2024)

1.题目描述 了解 Tracert 程序的实现原理&#xff0c;并调试通过。然后参考 Tracert 程序和计算机网络教材 4.4.2 节&#xff0c; 计算机网络 课程设计指导书 2 编写一个 Ping 程序&#xff0c;并能测试本局域网的所有机器是否在线&#xff0c;运行界面如下图所示的 QuickPing …

Three.js 纹理贴图的实现

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 纹理贴图简介 当我们创建一个网格时&#xff0c;比如我们不起眼的立…