查询语句中where和having的条件用法
where和having在查询语句中的作用都是条件限制
它们在查询语句中的位置是不一样的,而且限制的内容也不一样
1、所处位置不一样
在查询语句中where作为普通条件限制,它是在group by 之前
SELECT 班级, avg(语文分数) AS 语文平均分FROM 学生成绩表WHERE 英语分数>=60GROUP BY 班级
而having是一个过滤声明,是在查询返回结果集以后对查询结果进行的条件限制,位置是在group by 之后
SELECT 班级, avg(语文分数) AS 语文平均分FROM 学生成绩表WHERE 英语分数>=60GROUP BY 班级HAVING avg(语文分数)>=60;
2、后接内容不一样
在查询语句中where后面只能接普通条件,不能接聚合函数条件
所谓的聚合函数就是我们上一期提到的函数都可称为聚合函数
下面where后这样写是错误的:
SELECT 班级, avg(语文分数) AS 语文平均分FROM 学生成绩表WHERE avg(语文分数)>=60//错误GROUP BY 班级
在查询语句中having作为查询结果返回后的条件限制,需要接返回结果后的条件
下面having后这样写是错误的,因为返回结果已经不存在“英语分数”这个字段了:
SELECT 班级, avg(语文分数) AS 语文平均分FROM 学生成绩表WHERE 英语分数>=60GROUP BY 班级HAVING 英语分数>=60;//错误
3、运行结果不一样
在where后接的条件表示要在英语成绩及格的学生中进行统计
统计这些学生的语文成绩怎么样
从下面的结果可以看到:
在一班英语及格的学生中语文成绩并不好平均成绩没有达到及格线
而其它班级英语和语文成绩都较好。
而having后加了个条件是avg(语文分数)>=60
这表示在统计结果中只显示平均成绩及格的班级,不及格的班级不显示
从结果看以看到:
下面这个结果较之前少了一个班级,就是一班,因为一班语文平均成绩没及格
同时查询多个表
下面这个数据库有两个成绩单
一个是期中考试
一个是期末考试
要看一看学生成绩有没有进步:
创建一个查询,并写上下面的查询语句:
SELECT A.学号, A.姓名, A.英语分数 AS 其中英语分, B.英语分数 AS 其末英语分FROM 基础信息 AS A, 期末考试 AS BWHERE A.学号=B.学号;
SELECT:后面接的就是我们想要的信息,如学号,姓名,期中英语分,期末英语分;
FROM:后面接的就是涉及的表名,这里面我们就涉及两个表,一个是“期中考试”,一个是“期末考试”;
WHERE:后面接的就是限定条件,因为我们查的是两个表,而这两个表必须有一个纽带能够联系到一起,而这个纽带就是学生的学号,因为每个学生的学号是唯一的,并没有重复,所以,我们查询两个表的时候必须找到一个纽带,这个纽带不能重复,否则我们无法准确的区分学生的成绩。
运行之后,得到下面的结果:
可以看到,赵风车的成绩下降的最快,期中考了70分,而期末考了35分
其他人的成绩有上升较快的,刘玲的成绩由30分上升到76分
这样每个学生的成绩就一目了然了,无论涉及几个表,只要找到这几个表共有的纽带,就可以查询每个表相对应的信息了。
简单的嵌套查询
先来看下面这个简单的查询:
SELECT 班级, avg(英语分数) AS 英语平均分, avg(语文分数) AS 语文平均分FROM 学生成绩表4GROUP BY 班级;
运行结果是:
下面这个就是嵌套查询了:要看一下哪个班级英语平均分和语文平均分都及格了?
SELECT *FROM (SELECT 班级, avg(英语分数) AS 英语平均分, avg(语文分数) AS 语文平均分 FROM 学生成绩表y GROUP BY 班级) AS [%$##@_Alias]WHERE 英语平均分>=60 AND 语文平均分>=60;
运行结果是这样的,可以看到只显示两门成绩都及格的班级。:
本文地址:百科问答频道 https://www.neebe.cn/wenda/936281_4.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!