SQL中 WHERE 条件和HAVING条件能不能一起用

作者&投稿:堵娴 (若有异议请与网页底部的电邮联系)
sql语句中where和having的区别~

HAVING是先分组再筛选记录,WHERE在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前;而 HAVING子句在聚合后对组记录进行筛选。

作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。(严格说来,你可以写不使用聚集的 HAVING 子句, 但这样做只是白费劲。同样的条件可以更有效地用于 WHERE 阶段。)

总结就两句话:
WHERE语句在GROUPBY语句之前;SQL会在分组之前计算WHERE语句。
HAVING语句在GROUPBY语句之后;SQL会在分组之后计算HAVING语句。

HAVING是先分组再筛选记录,WHERE在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前;而 HAVING子句在聚合后对组记录进行筛选。

作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。(严格说来,你可以写不使用聚集的 HAVING 子句, 但这样做只是白费劲。同样的条件可以更有效地用于 WHERE 阶段。)

总结就两句话:
WHERE语句在GROUPBY语句之前;SQL会在分组之前计算WHERE语句。
HAVING语句在GROUPBY语句之后;SQL会在分组之后计算HAVING语句。

SQL中WHERE条件和HAVING条件可以一起用,WHERE后面跟的是条件,只有满足条件的数据才会显示出来。操作方法如下:

1、首先创建一个简单的数据表,可以按照自己想法来创建。

2、插入数据,select后面的字段是等下查询结果所显示的,where就是限制的条件,根据where查询到对应的列。

3、如果字段里面有数字的话也是可以根据数字大小进行查询的。

4、加入and语句可以同时限制两个条件来查询。

5、最后发现查询结果都显示的比较少,因为在select那里限制了结果,这里把改为*就是所有都显示了。



可以的比如说一个表LS(老师表):XM(姓名),NL(年龄),XB(性别),XK(学科)查询至少有两名女教师的学科拥有女教师的人数SELECT XK AS 学科,count(xb) as 总人数 from lswhere xb="女"group by xkhaving count(xb)>=2我是以这个为例子了仅供楼主参考

where好像只能用于原有数据表字段,聚合函数生成的字段无法配合使用,having通常和group by一起使用,可以配合聚合函数使用。

例如:检索指定班级编号的班级中重名的学生姓名select student_name from student where class_number = '班级编号' group by student_name having count(student_name) >= 2

运行顺序:where group by having WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行GROUP BY 子句用来分组 WHERE 子句的输出HAVING 子句用来从分组的结果中筛选行


顺河回族区19818674256: sql中where和having的功能分别是什么?区别是什么?
从顷阿奇: WHERE后面跟的是条件..只有满足条件的数据才会显示出来,比如日期在上个月到昨天之间之类的HAVING是跟在GROUP BY 分组后面的..你可以理解为GROUP BY的WHERE,他对GROUP BY分组后的数据进行条件筛选

顺河回族区19818674256: sql语句where条件查询 -
从顷阿奇: 必须指定限定查询. 格式: [SELECT] [{DISTINCT}] [* |具体的列别名FROM表名称] [{WHERE 条件(s)}] 例:查询出工资大5000的雇员的信息. 数学计算中,工资大于5000:sal > 5000 l SELECT * FROM emp WHERE sal > 4000 ; 输出如下:

顺河回族区19818674256: sql语句中where和having的区别 -
从顷阿奇: 1. where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行.2. having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组.

顺河回族区19818674256: SQL SERVER 中,having子句跟where子句有什么区别?
从顷阿奇: where是针对单个行而言的,而having是针对一组行而言的. where条件在进行分组操作之前,having在分组操作之后. having可一包含聚合函数 ,where不能使用聚合函数. 以上是在下浅见!下面是我上网找的一个带例子的解释,具体内容没看,请参考! http://wallimn.javaeye.com/blog/350568

顺河回族区19818674256: where字句定义的对象是什么 -
从顷阿奇: WHERE和HAVING区别在与作用对象不同,WHERE字句作用在与基本表和视图,从中选择满足条件的元组,WHERE字句不能用于集函数作为条件表达式.HAVING短语作用于组,从中选择满意条件的组.这是关于SQL的知识,很好理解的

顺河回族区19818674256: sql中where和having的区别 -
从顷阿奇: where是一个约束声明,是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据.where字句中不能包含聚组函数.where语句显示特定的行.having是一个过滤声明,是筛选满足条件的组,即在分组之后过滤数据.having字句中可以包含聚组函数.having语句显示特定的组.只要记清楚谁在分组之前使用,谁在分组之后使用就可以了

顺河回族区19818674256: 在SQL查询语句中,使用条件如:where 1=2 有什么意义?一般在什么情况下使用? -
从顷阿奇: WHERE 后面表示过滤的条件,只有满足条件的记录才被选择,因为条件(1=2)为假,其实就是什么都不选择,查询不会返回数据 ;如果条件是“1=1”就是选择所有记录.

顺河回族区19818674256: sql查询中的where和having的区别. -
从顷阿奇: 如果在sql语句中能够用where的地方尽量用where,相对来讲where条件查询的效率要比having子句的效率要高.希望能帮到你.

顺河回族区19818674256: 简述sql语句中where和having的区别,和使用的地方,谢谢? -
从顷阿奇: "Where"是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数."Having"是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚...

顺河回族区19818674256: ms sql中的 where语句和having语句 怎么区别,不好理解 -
从顷阿奇: 你们简直再放屁,不懂就别乱说.where和having其实后面都是跟条件.区别在于:在他们后面的条件里如果有count之类的聚合函数的时候只能使用having而不能使用where.这在任何一本数据库书里都能找到的答案.你们居然乱说.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网