演示数据
大家将以下面演示数据为例开展相关SQL语法练习,演示数据涉及学生信息表、教师信息表、课程信息表、成绩信息表,具体建表语句及数据如下:
学生信息表
大家向学生信息表中插入如下4条数据:
教师信息表
大家向教师信息表中插入如下3条数据:
课程信息表
大家向课程信息表中插入如下3条数据:
成绩信息表
大家向成绩信息表中插入如下11条数据:
通过上述SQL大家可以创建学生、教师、课程、成绩信息表,并插入样例数据,产生如下演示数据:练习如下
1查询所有同学的学生编号、学生姓名、选课总数、所有课程的平均成绩。
上述SQL执行结果如下:
2查询平均成绩高于60分的学生编号和学生姓名和平均成绩。
上述SQL执行结果如下:
在该例子中用到了any_value函数,该函数有什么作用呢,如下:
- 自MySQL5.7版本之后,sql_mode中only_full_group_by模式默认为打开状态。
- only_full_group_by就是确定selecttargetlist中的所有字段都是明确语义,即在此模式下selecttargetlist中的字段要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于groupby中的表达式的值,除此之外都将触发异常。
- 因此,MySQL提供了any_value函数来抑制only_full_group_by值被拒绝,any_value会选择被分到同一组的数据里第一条数据的指定字段值作为返回数据。
使用内连接,同样可以实现查询平均成绩高于60分的学生编号和学生姓名和平均成绩,如下。
3获取各课程的平均成绩,降序排列,若平均成绩相同时,按课程编号升序排列。
上述SQL执行结果如下:
4获取数学(Math)课程成绩不低于90分的学生学号、姓名班级、成绩信息。
上述SQL执行结果如下:
5获取语文(Chinese)课程成绩不超过60分的学生学号、姓名班级、成绩信息,按分数降序排列的学生信息。
上述SQL执行结果如下:
6获取班级的数学(Math)课程平均成绩大于90分的班级。
上述SQL执行结果如下:
7获取没有缺考的学生的学号、姓名、班级信息。
上述SQL执行结果如下:
8获取所有学生的课程及分数情况(存在学生没成绩,没选课的情况)
相关阅读:
学以致用,语法基础实战:https://www.toutiao.com/i6743064663044407815/
学以致用,语法进阶实战:https://www.toutiao.com/i6743066018496659981/
学以致用,语法强化实战:https://www.toutiao.com/i6743141851047395854/