怎么查询同名同姓人数_SQL—多表查询

本文介绍了如何使用SQL进行多表查询,包括表的加法、联结以及解决实际问题的案例。通过三个具体的问题,如查询学生学号、姓名、选课数及总成绩,平均成绩大于85的学生信息,以及学生的选课详情,展示了SQL查询的步骤和方法,还提到了CASE表达式的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

71d584876f7593ad74172ea59f80eefb.png

8868aafe1e23b11409282d4f3513f218.png
知识总览

一.表的加法

1e135a2a1e5c91e0abf0137b4c9f8fd2.png
union连接会删除重复的部分

52b6c20357132990c7926ea9ffa08468.png
union all连接所有列

二 . 表的联结

553799a636553d7ec56c279670b17306.png
表的联结的知识架构

4c543938ccdf5842a69faed5aabc0091.png
使用inner jion进行内联结

529a71f999afd56f94b161e77666dce6.png
left jion 会存在空值(Null)

d67ec9ea60ceeff37d8e8cd78f7a472c.png
right jion与left jion类似

8045ba3c0a3797e28c7eef1420204331.png
一张图记住几种联结

三.解决SQL实际问题的案例及三步走分析方法

问题1:查询所有学生的学号,姓名,选课数及总成绩:

第一步,翻译成大白话:

1)学号,姓名(student)

2)选课数(每个学生的选课数目:成绩表score,按学号分类,对课程号计数count)

3)总成绩(每个学生的总成绩):

成绩表score,

按学号分组,对成绩求sum

第二步:写出分析思路:

select 查询结果[学号,姓名,选课数,总成绩]

from 哪张表(学生表student,成绩表score)

两个表怎么联结?通过学号,用哪种联结?左联接

where 查询条件(没有)

group by 分组(

每个学生的选课数目:按学号分组,对课程号求count

每个学生的总成绩:按学号分组,对成绩求sum)

having 对分组结果指定条件(没有)

order by 对查询结果排序(没有)

limit 从查询结果中取出指定行(没有);

第三步:写出sql语句:

e2ae9164e27ab894893390f2a4b89551.png

问题2:查询平均成绩大于85的所有学生的学号,姓名和平均成绩

第一步:

1)查询出所有学生的学号,姓名,平均成绩

学号,姓名再student表中

平均成绩(每个学生的平均成绩在成绩表score中,按学号分组,平均成绩:avg(成绩))

2)平均成绩>85

第二步:

select 查询结果[学号,姓名,平均成绩]

from 哪张表(学生表student,成绩表score)

两个表怎么联结?通过学号,用哪种联结?左联接

where 查询条件(没有)

group by 分组(

平均成绩:按学号分组,对成绩求avg)

having 对分组结果指定条件(b.成绩)>85

order by 对查询结果排序(没有)

limit 从查询结果中取出指定行(没有);

第三步:

f083bfd754c9a3e1c0b504828f77610b.png

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

第一步:

1)查询出所有学生的学号,姓名(student)课程号以及课程名称(课程表course)

第二步

select 查询结果[学号,姓名,课程号,课程名称]

from 哪张表(学生表student,课程表course)

两个表怎么联结?通过成绩表产生联系 用哪种联结?两两使用内联结

where 查询条件(没有)

group by 分组(没有)

order by 对查询结果排序(没有)

limit 从查询结果中取出指定行(没有);

第三步:

b521867a46d8e74edb63f7820084bc63.png
inner jion联结三张表

四. case表达式的使用

case表达式:

case when 判断表达式 then 表达式

when 判断表达式 then 表达式

else 表达式

end

dc785238228e8261aa087efbdb6b5a83.png
查询出每门课程的及格人数和不及格人数

5192a60bcb934141a39627dc20e44062.png
统计各科成绩各分段的人数

五.SQLZOO练习

50e269bde70c8264be05ee8eec926f14.png

c03661c8dd1733042519489937ce1979.png

1f6092bf156ec9a1d34e4449b9b3c4e2.png

5040cee43b149abf2335c9d53a95f474.png

ac2336c078b0473e4a6ce043cb0ac788.png

d2ec1fc420c27cb07e2323e5ccd2e9de.png

349e014de7f6d6b66fcf99cc925e5ad0.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值