纵有疾风起
人生不言弃

数据库查询语句的应用例题查询思路剖析和查询知识点小结

题目:试查询下图数据表中2门及2门以上课程不及格同学的平均分
要求:只允许使用一次select查询

1.数据表设计如下图:
数据库查询语句的应用例题查询思路剖析和查询知识点小结插图

2.试着将题目要求进行拆分处理:首先试着查询所有同学的平均分,使用group by进行人员的分类:
数据库查询语句的应用例题查询思路剖析和查询知识点小结插图1
3.到这一步之后发现问题僵住了,因为要求是所有同学的平均分,而我们却还要判断该同学是否考试了2门以及挨个判断他们的成绩是否及格;此时可以将要求再细分,先查询该同学的单科成绩是否及格;
数据库查询语句的应用例题查询思路剖析和查询知识点小结插图2

4.从上图可以看出此时满足scores<60的条件则为1,否则为0;只需要选择将此条件使用sum统计数量作为查询列条件并代入having条件即可(注意不能使用count,因为count函数内不管表达式是否成立都会算出行数,它是用来统计行数的),所以综合上述可以得出答案:
数据库查询语句的应用例题查询思路剖析和查询知识点小结插图3

5.知识点小结:
having和where的区别在于having是在查询结果中查询,例如上图中的fail并不是数据表中实际存在的列而是作为查询结果显示出来的效果列的别名,所以不能使用where查询;
group by是指一组分类使用,上面的数据表中name字段存在同名的值,可以将其作为一个类别来查询该类别下面的其他列值的总和、平均值和最大及最小值;
如果cmd窗口无法输入中文可以尝试:chcp 936更改窗口当前代码页为gbk格式
chcp 65001为utf-8格式;
5个查询子句为where,group by,having,order by,limit;如果有多个需要同时使用则必须严格按照顺序,否则会报错;
理解mysql:查询的结果可以当做表;查询的列名可以当做一个变量;where后的查询条件可以当做一个表达式,在做查询匹配时可以理解为逐行匹配;
清空表使用:truncate table_name;

原文链接:https://blog.csdn.net/living_ren/article/details/79078927

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

未经允许不得转载:起风网 » 数据库查询语句的应用例题查询思路剖析和查询知识点小结
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录