语句 查询每个人每个科目的最高分_转行数据分析师专栏(SQL篇)-05多表查询...

数据表(4张)及数据情况:

145a3b863f098736f1d3e6523219c783.png
搭建数据表数据参考:
空杯希望:转行数据分析师专栏(SQL篇)-01SQL入门​zhuanlan.zhihu.com
025d0077bde90a07715aa8ca83c14f16.png

一、表的加法

1、先新建一个表course1(和course表数据结构一致,但数据不一样)

3839544ed43aeb3fe9aa518d8076fdba.png
course1表

2、union:将course和course1表数据合并

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
-- 对重复的数据(0001,语文,教师号)只保留一行
SELECT 课程号,课程名称
FROM course
UNION
SELECT 课程号,课程名称
FROM course1

92fd733b0128e05585f159cf323f2d3c.png
-- 保留重复的数据
SELECT 课程号,课程名称
FROM course
UNION ALL
SELECT 课程号,课程名称
FROM course1

5af848f467d6d8b09e2765be777f50c5.png

二、表的联结

1、内联结(inner join,默认为join)

只返回两个表中联结字段相等的行

ac85920d0b5d4ca7917f3ef68118841a.png

案例:查询有考试记录的每个学生考过哪些课程,列名包括学号,姓名,课程号

-- 1、0002学号在score表里没有0001课程号的数据,所以查询结果不存在这行数据
-- 2、0004学号在score表里没有任何课程号的数据,所以查询结果没有这位学生数据
SELECT a.学号,a.姓名,b.课程号
FROM student AS a 
INNER JOIN score AS b
ON a.学号 = b.学号

b71d861fe97aa0cf4772152ee983d879.png

2、左联结(left join)

返回包括左表中的所有记录和右表中联结字段相等的记录

3c4a5cbadaeead131728864c1e642bf0.png

案例1:查询全部学生的学号,姓名及考试科目(课程号)

-- 0004学号在score表虽然没有记录,但因为是左表的数据,所以会保留在查询结果
SELECT a.学号,a.姓名,b.课程号
FROM student AS a 
LEFT JOIN score AS b
ON a.学号 = b.学号

b5973785f5678cee26f5489b7f97ca09.png

案例2:不显示案例1王思聪的数据

SELECT a.学号,a.姓名,b.课程号,b.成绩
FROM student AS a 
LEFT JOIN score AS b
ON a.学号 = b.学号
WHERE b.学号 IS NOT NULL

30f4653c19e49c2f59fe728ac3c79f6b.png

3、右联结(right join)

返回包括右表中的所有记录和左表中联结字段相等的记录

a8b03aaca5beb5c5859db1ab3fb7a9be.png

案例:查询考过课程的学生信息,列名包括学号、姓名和课程号、分数(跟左联结的案例2结果一直)

SELECT a.学号,a.姓名,b.课程号,b.成绩
FROM student AS a 
RIGHT JOIN score AS b
ON a.学号 = b.学号

1c29a3de20200b0a360917380a43894c.png

4、全联结(full join)

存在匹配,匹配显示;同时,将各个表中不匹配的数据与空数据行匹配进行显示。可以看成是左外连接与右外连接的并集。

798bdca09eda88a5df03c0cb28069535.png
注意:Mysql不支持full join

5、一张图总结SQL联结

eef370e79d3b3c42eb03f3308c207563.png

三、联结应用综合案例

1、查询所有学生的学号、姓名、选课数、总成绩

-- 1)学号、姓名(学生表student)
-- 2)选课数(每个学生的选课数目:成绩表score,按学号分组,对课程号计数count)
-- 3)总成绩(每个学生的总成绩:成绩表score,按学号分组,对成绩求和sum)
SELECT st.学号,st.姓名,count(课程号),sum(成绩)
FROM student as st LEFT JOIN score as sc on st.学号=sc.学号
GROUP BY 学号

b1fa4b460456c75c4d7b631a05f32c85.png

2、查询平均成绩大于85的所有学生的学号、姓名和平均成绩

-- 1)查询出所有学生的学号,成名,平均成绩,学号,姓名(在学生表student)
--    平均成绩(每个学生的平均成绩:在成绩表score,按学号分组,平均成绩:avg(成绩))
-- 2) 平均成绩>85
SELECT st.学号,st.姓名,avg(成绩)
FROM student AS st
RIGHT JOIN score AS sc ON st.学号 = sc.学号
GROUP BY 学号
HAVING AVG(成绩) > 85;

c75d47e2d822ddcedef6053a95bda245.png

四、case表达式

e901cbb1d83960d5ceed4bf4ea3c05ce.png

案例1:查询出每门课程的及格人数和不及格人数

1958712539f4c7e1b31480b453aea207.png
SELECT 课程号,
SUM(CASE WHEN 成绩>=60 THEN 1 ELSE 0 END) AS 及格人数,
SUM(CASE WHEN 成绩<60 THEN 1 ELSE 0 END) AS 不及格人数
FROM score
GROUP BY 课程号

2f29e5828e197e9e02d4047d1e958f4d.png

案例2:使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:各分段人数,课程号和课程名称。

SELECT SUM(CASE WHEN sc.成绩<=100 AND sc.成绩>=85 THEN 1 ELSE 0 END)AS '[100-85]',
SUM(CASE WHEN sc.成绩>=70 AND sc.成绩<85 THEN 1 ELSE 0 END)AS '[85-70]',
SUM(CASE WHEN sc.成绩<70 AND sc.成绩>=60 THEN 1 ELSE 0 END)AS '[70-60]',
SUM(CASE WHEN sc.成绩<60 THEN 1 ELSE 0 END)AS '[<60]'
,sc.课程号,co.课程名称
FROM course as co RIGHT JOIN score as sc ON co.课程号=sc.课程号
GROUP BY sc.课程号,co.课程名称

9353b9b79a32b430d95f96df95ae1fe8.png

五、练习题

链接:
The JOIN operation/zh​sqlzoo.net

a0dd200f0b37e60e8877028ada4e83a8.png

86bf46f8341e67eae9e59d91f082631d.png

3c62923df8544ba62869b50ca375d94c.png

9b4701aebb433c0bb29bbae439714c86.png

6fde9db1a9cda5d8f2f1fa954deb0af2.png

6d4d801e31dd0be34217edbccd29c090.png

f6b8385737b84edc55c51d47d9ee8d9b.png

4f917df0b24b88cc9f2328196a9d77cb.png

35c9198333caf90bd545087df6246ac7.png

3b7caaf24f2f16dd7eb0348e07c7f83b.png

61505141c55c8d4e67a60390331613d3.png

d1fe8b24400aa8ae9ee903d1a5b55744.png

2ccf3041c016e70103f9b7e7f1c1b397.png
往期数据分析专栏:
转行数据分析师专栏(Excel篇)​zhuanlan.zhihu.com
cc64c076b86f656c5715517efcea96ad.png

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

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

相关文章

plsql 设置鼠标行执行_如何制作键盘鼠标产品质量合格证

鼠标前盘属于办公用品套装&#xff0c;一般会一起销售&#xff0c;但是也不排除分开销售&#xff0c;无论是哪种方式键盘鼠标在生产销售时都需要携带对应产品质量合格证&#xff0c;对产品进行简单的说明&#xff0c;更能保障消费者的权益。那么如何制作产品质量合格证呢&#…

第四章例4-2

/* 输入一批学生的成绩&#xff0c;以负数作为结束标志&#xff0c;计算平均成绩&#xff0c;并统计不及格人数 */ #include<stdio.h> int main(void) {int count,num;double grade,total;num0;total0;count0;printf("Enter grades:");scanf_s("%lf"…

html.action 访问分部视图,MVC+EF 随笔小计——分部视图(Partial View)及Html.Partial和Html.Action差异...

Partial View指可以应用于View中以作为其中一部分的View的片段(类似于之前的user control), 可以像类一样&#xff0c;编写一次&#xff0c; 然后在其他View中被反复使用。一般放在"Views/Shared"文件夹中以共享。创建Partial View&#xff1a;一般直接右键"Vie…

svm核函数gamma参数_非线性SVM与核函数

前面几篇我们介绍的都是线性支持向量机&#xff0c;换句话说&#xff0c;我们总可以用一条线或一个超平面将数据进行分割。如下图所示&#xff1a;但在更多情况下&#xff0c;有些数据是无法进行线性分割的。比如下面的例子&#xff1a;也就是说&#xff0c;你永远无法用一条直…

anychart说明文档

今天学习anychart&#xff0c;在慧都控件网上看有关文档&#xff0c;模仿试着做了个demo&#xff0c;发现慧都空间网的“Flash图表AnyChart应用教程六&#xff1a;创建圆形仪表”里的指针“<pointer type"bar" value"35" color"Gray" />”…

h5 神策埋点_咕咚技术总监唐平麟:神策使我们的数据平台成本降低约 75%,迭代效率提升 2~3 倍...

在这个数据爆炸的时代&#xff0c;数据成为各行各业出奇制胜的法宝&#xff0c;运动行业也不例外&#xff0c;那么大数据对运动业有什么价值呢&#xff1f;咕咚作为智能运动的倡导者和先行者&#xff0c;致力于成为全球领先的运动大数据和服务平台&#xff0c;现已为超过 1.5 亿…

JavaFX,Jigsaw项目和JEP 253

因此&#xff0c; Java 9可能会破坏您的代码 …… 如果您的项目使用JavaFX&#xff0c;则这尤其可能&#xff0c;因为许多自定义项和自制控件都需要使用内部API。 借助Project Jigsaw&#xff0c;这些内容将无法在Java 9中访问。幸运的是&#xff0c; Oracle在几天前宣布了 JE…

ios 获取是否静音模式_果粉感动:部分iOS“新功能”早已被安卓玩坏

一年一度的WWDC大会如期举行&#xff0c;今年不仅展示了全新的iOS、iPadOS以及macOS。当然&#xff0c;具体更新了什么相信早已经被各大媒体报道出来&#xff0c;本文并不是重复报道&#xff0c;相反的&#xff0c;iOS经过了13代的发展&#xff0c;有开创性的动作&#xff0c;也…

怎么把桌面计算机隐藏文件,怎么隐藏桌面文件夹名称?隐藏桌面图标下的文字的详细教程...

怎么隐藏桌面文件夹名称&#xff1f;桌面图标一多就会显得很凌乱&#xff0c;特别有的软件名称很长&#xff0c;那么有没有什么方法可以让桌面看起来很清爽呢&#xff1f;当然是有&#xff0c;去掉桌面应用的名称不就简洁清爽了&#xff1f;下面就教大家不利用第三方软件的情况…

window xp系统安装php环境_Windows Server 2003及XP系统如何安装SQL Server 2000数据库?

年头年初节假日就是小编的梗&#xff0c;忙得不可开交&#xff0c;这不越冷越刮风昨天服务器又崩了&#xff0c;折腾了一天安装好Windows Server 2003和IIS(这系统是有点老了&#xff0c;主要是单位机子和各系统也有点年头了&#xff0c;没办法)&#xff0c;做好各项配置后总算…

rnn神经网络 层次_精讲深度学习RNN三大核心点,三分钟掌握循环神经网络

每天给小编五分钟&#xff0c;小编用自己的代码&#xff0c;让你轻松学习人工智能。本文将剖析循环神经网络(RNN)的工作原理&#xff0c;精讲循环神经网络的特点和实现方式。野蛮智能&#xff0c;小白也能看懂的人工智能。循环神经网络从何而来&#xff1f;我在我的这篇文章介绍…

摆脱匿名类

我真的很喜欢编写和阅读lambda表达式-它们简洁&#xff0c;富于表现力和时尚&#xff08;来吧&#xff0c;这样就没关系了&#xff01;&#xff09;。 将此与匿名类进行比较。 这就是为什么我喜欢摆脱它们&#xff01; 在过去的几个月中&#xff0c;这种认识慢慢地实现了&…

ARM学习(24)Can的高阶认识和错误处理

笔者来聊一下CAN协议帧的认识和错误处理。 1、CAN协议帧认识 CAN 差分信号&#xff0c;是经过CAN收发器转成差分信号的&#xff0c;CAN RX和TX是逻辑电平。CAN的基础知识&#xff0c;可参考笔者这边文章&#xff1a;ARM学习&#xff08;21&#xff09;STM32 外设Can的认识与驱…

云桌面 瘦终端_小米盒子连接Citrix云桌面

先前看到很多公司使用Wyse、Hp等瘦终端设备登陆Citrix云桌面&#xff0c;便想购得一台瘦终端设备&#xff0c;想来只是为了测试&#xff0c;况且瘦终端价格不低&#xff0c;便一直未买。后使用自己的平板连接Citrix XenDesktop创建的Win7桌面&#xff0c;感觉效果很好&#xff…

Apache Mesos + Marathon和Java EE

Apache Mesos是一个开放源代码群集管理器&#xff0c;可在分布式应用程序或框架之间提供有效的资源隔离和共享。 Apache Mesos从计算机&#xff08;物理或虚拟&#xff09;上提取CPU&#xff0c;内存&#xff0c;存储和其他计算资源&#xff0c;从而使容错和弹性的分布式系统易…

计算机指令中数据寻址的方式,1.变址寻址需要在指令中提供一个寄存器编号和一个数值。 2.计算机的指令越多,功能越强越好。 3.程序计数...

满意答案happysk72推荐于 2017.12.16采纳率&#xff1a;57% 等级&#xff1a;12已帮助&#xff1a;21199人1.对变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加&#xff0c;从而得到一个操作数的有效地址。变址寻址方式常用于访问某基…

babel原理_带你了解 snowpack 原理,你还学得动么(下)

作者&#xff1a;AlienZHOU转发链接&#xff1a;https://zhuanlan.zhihu.com/p/149351900目录带你了解 snowpack 原理&#xff0c;你还学得动么(上)带你了解 snowpack 原理&#xff0c;你还学得动么(下)本篇小编建议小伙们从第一篇开始&#xff0c;按照顺序来看&#xff0c;更清…

测试社交软件有哪些,性格测试:测你适合哪个社交平台

你喜欢通过什么方式和人交流&#xff1f;随着网络世界越来越发达&#xff0c;人们越来越倾向于使用社交工具来维系与家人、朋友、同事之间的关系。不但在现实生活中不好直接表达出来的话通过网上交流的方式可以顺畅地表达出来&#xff0c;而且也节约了时间上的成本&#xff0c;…

VS2012无法安装cocos2d-x-2.1.4 解决方法及VS2012新建coco2d-x项目(一)

转自&#xff1a;http://www.cnblogs.com/wangpei/admin/EditPosts.aspx?opt1 &#xff08;注&#xff1a;此方法是可行&#xff0c;仅供参考&#xff0c;建议大家直接看我的 一见命令解决vs安装并创建cocos2d-x&#xff0c;如果你习惯了和以前一样在vs点击创建就用这个方法&a…

excelexportentity中设置null不显示的方法_一般人不知道的线程间数据交换Exchanger

线程间的数据共享除了定义一个共享数据然后各个线程去访问这种方式外&#xff0c;还可以使用Exchanger交换数据。简单案例首先看看Exchanger的运用&#xff0c;Exchanger最简单的测试代码&#xff0c;如下图&#xff1a;对应打印的结果如下&#xff1a;线程2创建对象java.lang.…