从零学会SQL:多表查询(实操演示)


风晓
风晓 2023-12-28 13:38:35 52893 赞同 0 反对 0
分类: 资源
本文主要讲从零学会SQL:多表查询(实操演示)

1. 表的加法

如何合并两个表?

1)不保留重复行

2)保留重复行

2. 表的联结

交叉联结(cross join)、内联结(inner join)、左联结(left join)、右联结(right join)、全联结(full join)
join如果不带有其他标识,则默认是内连接即join=inner join。

1)交叉联结(cross join),也叫“笛卡尔积”


为了下面知识点容易理解,而简化的数据表

2)内联结(inner join)

3)左联结(left join)

联结

理解思路:首先通过图中的红箭头,定位筛选出是交叉联结表中的最后一行(即学号为0002那一行),然后对号入座输出select子句对应列名的值(图中的3个绿色箭头)。
注意:空值(Null)不能使用等号=,只能使用 is null或者is not null。

4)右联结(right join)

联结

5)全联结(full join)


小结


3. 联结应用案例

 

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

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

3)查询学生的选课情况:学号,姓名,课程号,课程名称

左联结(left join)
内联结(inner join)

4. case表达式

1)查询出每门课程及格人数不及格人数

解法 1
因为输出结果包含“课程名称”列,所以牵涉到score和course两张表。需要用到“联结”。
解法 2
因为输出结果不包含“课程名称”列,只牵涉到score一张表,不需要用到“联结”。


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

注意:成绩的分段区间两侧需要加上单引号‘’

sqlzoo 练习题

sqlzoo

以下题目来自sqlzoo的多表查询题目:

网址:sqlzoo.net/wiki/The_JOI

这部分题目使用的是‘2012年欧洲足球锦标赛’数据库里的表。

join如果不带有其他标识,则默认是内连接即 join=inner join

没有去掉重复值(distinct)

题目中让列出matchid,而select中用的是id,不太严谨

其实,group by子句子句中只用到“a.id”来分组就可以了的。是因为分组结果中没有比赛日期(mdate),而查询结果要求有比赛日期(mdate)。

“select子句中的列名只能是group by子句中的列名”。

当然,此语法是适用于所有数据库的通用语法。对应不同的数据库会有差别,比如mysql(最新版本)就不受“select子句中的列名只能是group by子句中的列名”条件的限制。
更加准确的答案

对比上面3张图:题目“入球数字”的意思,是总的入球数,即无论是POL,还是对方进的球,都算入“入球数字”;


注意:题目限制的是“德国”入球的数字,不是总入球数字,所以用到了【where teamid= 'GER'】

这恰好验证了自己上一题(第11题)的想法,突然觉得自己有出题者的天分,做上一题就把下一题的思路想到了,自夸一下,哈哈~


总结

各种联结(join)汇总比较

错误答案
正确答案
此题由于是右联结,即score是主表,所以select子句中的“学号”必须得用“b”。

总结体会:select子句中列名的别名(a、b、c……)必须得和下面的对应的联结种类对应,不然会得出不同的运行结果。(就算有时候运行结果一样,也只是各表之间的数据巧合而已)。

多表查询,既复杂也简单,确实是有一定的“套路”的,需要自己不断摸索体会。很多容易出错的细节地方,需要不断总结。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  125
统信桌面专业版【全盘安装UOS系统】介绍  120
银河麒麟桌面操作系统安装佳能打印机驱动方法  111
银河麒麟桌面操作系统 V10-SP1用户密码修改  105
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!