依旧准备好三张有关联的表格:学生表t_student,班级表t_class,成绩表t_grade
![d83cf8fce3832ff734ca13ee6415385c.png](https://i-blog.csdnimg.cn/blog_migrate/17298cfc810dfce4db62d5f8fcd5c094.jpeg)
![c7a0db5cfbea94a7a6d70019572c8cc2.png](https://i-blog.csdnimg.cn/blog_migrate/8370c9bcd8a58670ac2120d9ed52d573.png)
![50a06657355a0171b3d133b0a7ac7040.png](https://i-blog.csdnimg.cn/blog_migrate/61697ad593afd1cfc6f56ffb77be3af5.png)
回顾:多表联查,select a.id,a.sname,b.cname,c.chinese,c.math,c.english from tstudent a a join t_class b on a.cid=b.id join t_grade c on c.sid = a.id where c.chinese>100
![28515a60e4ecaf86c58dd1da2b62afe0.png](https://i-blog.csdnimg.cn/blog_migrate/1319f6cfc304dfac9c915949725fe5c0.jpeg)
一,sql分组group by的运用
问:假设统计以班级为分组,两个班级的平均分
输入命令:select b.cname,avg(c.chinese+c.math+c.english) a from tstudent a a join t_class b on a.cid=b.id join t_grade c on c.sid group by b.cname;
![777eceb5f0b94248a65b85c0413ca7ea.png](https://i-blog.csdnimg.cn/blog_migrate/67d759979db848f1e8c0ae6a3fc34c17.png)
注意:分组group by 必须和聚合函数配合使用,不能单独用
问:查询出男女的人数和男女中最大的年龄
![89bdb8c734b1c200d14960d19611f2d2.png](https://i-blog.csdnimg.cn/blog_migrate/79222c96a19582334797cd1820204cfe.png)
问:查询出同名的人
![d0c509289afe37b8a1596f2747583b3a.png](https://i-blog.csdnimg.cn/blog_migrate/103ba18f56633b597f728def194532e3.png)
注意:添加条件时,筛选分组后的数据用having,筛选分组前的用where
问:统计出每个班的语文成绩大于100分的同学的语文平均分,并只显示平均分高于110的班级
![6ce681677e48404aa5129f16186724a6.png](https://i-blog.csdnimg.cn/blog_migrate/8933c7c5de7eee75e596f32c71eb1878.png)
二,数据排序order by的运用
正序:asc(可省略) 倒序:desc
问:将学生表的学生按照年龄倒序排序
![ea430025bc2951f460c07f2b082a631e.png](https://i-blog.csdnimg.cn/blog_migrate/d71cd67426cfc6f0599816d9933cd6b8.jpeg)
三,限制数据显示limit的运用
如:select * from t_student limit 0,5
0,代表从哪条开始显示,5,表示显示多少条(0可省略)
![e37aee27a790e94d45716cee9f7c4b00.png](https://i-blog.csdnimg.cn/blog_migrate/92af8b2e7f1c4510360231e6b061eddc.png)
问:统计出每个班语文平均分成绩大于100的同学的班级语文平均分,然后显示出平均分最高的班级
![c350a953d54f7e2902297ad98a7024af.png](https://i-blog.csdnimg.cn/blog_migrate/e36d8435f85a5ad6f138008b80036d0d.png)
四,条件语句case when ...then... end 的运用
问:30岁以内显示青年,30-60显示壮年,60以上显示老年
剩余可以用else
![d3014b9e65a579d0429824273112fa98.png](https://i-blog.csdnimg.cn/blog_migrate/e914925c7032313a9e8919a2af564ac9.png)
五,多表联查的方式
1,内连接(join): 显示的数据是取自两表的交集(只显示两表关联的上的字段)
2,外连接:取自两表的并集
左连接(left join):显示左表的所有数据和两表关联上的数据
右连接(right join):显示右表的所有数据和两表关联上的数据
![68ee626e26cccab024c30dac79506186.png](https://i-blog.csdnimg.cn/blog_migrate/80172e06bfb2a35ea4e7ba00859e2a02.jpeg)
六,嵌套查询
通过 把查询结果作为表/条件/列 进行查询
如:
![2ca02f6496599710e6b82cb65a6f453c.png](https://i-blog.csdnimg.cn/blog_migrate/612a84740fb084d23bbc643381dbd3d9.png)