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

目录

1、子查询

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


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

学员信息表:person
id name      age
1 atom  19
2 atom2 19
3 atom3 21
4 atom4 21
5 atom5 25
6 atom6 25

班级列表:class
id name      class
1 atom  class1
2 atom2 class1
3 atom3 class2
4 atom4 class2
5 atom5 class3
6 atom6 class3

成绩列表:score
id name      chinese math english
1 atom  90 60 45
2 atom2 60 60

60

3 atom3 40 80 90
4 atom4 70 70 70
5 atom5 45 35 75
6 atom6 100 40 85

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")

 

Guess you like

Origin blog.csdn.net/weixin_42893232/article/details/120836722