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

本文通过一道实例题目,解析如何利用一次`SELECT`查询找出不及格2门及以上课程的同学的平均分。详细介绍了如何将题目拆解,结合`GROUP BY`、`HAVING`等子句解决问题。同时总结了`HAVING`与`WHERE`的区别,以及`GROUP BY`的使用场景,并分享了查询子句的使用顺序和清空表的方法。
摘要由CSDN通过智能技术生成

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

1.数据表设计如下图:
这里写图片描述

2.试着将题目要求进行拆分处理:首先试着查询所有同学的平均分,使用group by进行人员的分类:
这里写图片描述
3.到这一步之后发现问题僵住了,因为要求是所有同学的平均分,而我们却还要判断该同学是否考试了2门以及挨个判断他们的成绩是否及格;此时可以将要求再细分,先查询该同学的单科成绩是否及格;
这里写图片描述

4.从上图可以看出此时满足scores<60的条件则为1,否则为0;只需要选择将此条件使用sum统计数量作为查询列条件并代入having条件即可(注意不能使用count,因为count函数内不管表达式是否成立都会算出行数,它是用来统计行数的),所以综合上述可以得出答案:
这里写图片描述

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值