SQL基础8--多表查询(1)

目录

1、子查询

2、子查询带计算函数的写法


之后要涉及到多表了,所以又重新梳理出来三个表

学员信息表:person
idname     age
1atom 19
2atom219
3atom321
4atom421
5atom525
6atom625

班级列表:class
idname     class
1atom class1
2atom2class1
3atom3class2
4atom4class2
5atom5class3
6atom6class3

成绩列表:score
idname     chinesemathenglish
1atom 906045
2atom26060

60

3atom3408090
4atom4707070
5atom5453575
6atom61004085

1、子查询

如果我们想知道班级1的学生英语都考了多少分,应该怎么查询呢?

思考这个题目,我们可以分为两步去做

(1)、筛选出班级1都有哪些学生

(2)、根据筛选出来的学生,再去搜索英语成绩

怎么筛选班级1有哪些学生呢? 这个很简单,就是我们最开始学的sql

SELECT name from class where class = "class1"   搜索班级为class1的学生

得到结果为 atom和atom2

 然后我们在根据得到的学员atom和atom2去class表查询对应学员的英语成绩

SELECT name,english FROM score where name in ("atom","atom2")   

得到结果为 atom英语成绩为 45   atom2英语成绩为60

好,到此为止算是求出来,atom和atom2的英语成绩了,但是我想用一个sql语句怎么实现呢?

这时候就可以用到子查询了

SELECT name,english FROM score where name in (SELECT name from class where class = "class1")

这个语句就是先搜索括号内的结果得到班级为class1的学员,然后在去搜索学员的英语成绩

 

2、子查询带计算函数的写法

如果我们要查询班级A的语文(chinese)的平均成绩应该怎么办?

(1)、筛选出班级1都有哪些学生

(2)、根据筛选出来的学生,再去搜索平均的语文成绩

和上面一样 

SELECT name from class where class = "class1"   搜索班级为class1的学生

得到结果为 atom和atom2

然后再根据结果求平均数,把atom和atom2带入到句子里

select avg(chinese) from score where name in (select name from class where class = "class1")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘阿童木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值