当前位置: 首页 > 编程笔记 >

SQL中where和having的区别详解

曾昂然
2023-03-14
本文向大家介绍SQL中where和having的区别详解,包括了SQL中where和having的区别详解的使用技巧和注意事项,需要的朋友参考一下

概念

where

where是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,再返回结果前起作用,并且where后不能使用“聚合函数”。

聚合函数

对一组值执行计算,并返回单个值,也被称为组函数,经常与 SELECT 语句的 GROUP BY 子句的HAVING一同使用。例如

AVG 返回指定组中的平均值COUNT 返回指定组中项目的数量MAX 返回指定数据的最大值。MIN 返回指定数据的最小值。SUM 返回指定数据的和,只能用于数字列,空值被忽略。

having

having是一个过滤声明,是在查询数据库结果返回之后进行过滤,即在结果返回值后起作用,与聚合函数共同使用。

区别

使用group by进行过滤,则只能使用having。

执行顺序:where>聚合函数(sum,min,max,avg,count)>having,故where不使用聚合函数。

举个例子

职员表

 1、成绩大于8的有哪些?

使用where

 使用having

 报错,因为having是对已过滤后的结果,进行筛选,但是筛选出没有employee_score这个值,所以报错,如果加上则可以查出。

 

故where和having很多时候不能随意替代,主要是过滤对象不同。

2、每个部门年龄大于20的最高最低成绩?

 使用where也可以

 但是需要注意执行顺序

注意事项

在编写sql语句时,要注意where和group by的执行顺序,where应在前执行,group by 在后,否则会报错。

总结

到此这篇关于SQL中where和having的区别的文章就介绍到这了,更多相关SQL where和having区别内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 问题内容: 是什么区别,并在声明中? 编辑:我已将史蒂文的答案标记为正确的答案,因为它包含链接上信息的关键部分: 不使用when时,其行为类似于子句 我所见过的情况并没有发生,而这正是我开始困惑的地方。当然,除非您知道这一点,否则无法在问题中指定它。 问题答案: HAVING为SELECT语句中使用的组或聚合函数指定搜索条件。

  • 本文向大家介绍Where 与 Having之间的区别,包括了Where 与 Having之间的区别的使用技巧和注意事项,需要的朋友参考一下 SQL查询中使用的两个关键字“ Where”和“ Having”都是用于根据给定条件过滤和汇总从数据库中检索到的数据。 根据两个关键字的特征,我们可以区分Where和Have,如下所示: 序号 键 where having 1 定义 SQL查询中的WHERE子

  • 问题内容: 以下两个命令有什么区别? 和 哪一个更快?如果是另一种类型,会有所不同吗? 问题答案: 它们在语义上是相同的。 只是第二个示例中一串相等语句的简写形式。性能也应该相同。 类型无关紧要,它将始终计算为一串相等的字符串。 但是,使用和数据可能有所不同,a的比较结果不会为false ,因此您可能会得到结果集中未曾期望的行。 举个例子: 上面的查询将不会返回一行,即使在面值既不或者-这是因为是

  • 本文向大家介绍详解sql中exists和in的语法与区别,包括了详解sql中exists和in的语法与区别的使用技巧和注意事项,需要的朋友参考一下 exists和in的区别很小,几乎可以等价,但是sql优化中往往会注重效率问题,今天咱们就来说说exists和in的区别。 exists语法: select … from table where exists (子查询) 将主查询的结果,放到子查询结果

  • 问题内容: 以下语句给出相同的结果(一个使用,另一个使用): 我只能看到在左外部联接的情况下找到“无与伦比”的情况:( 以找出从未有人发送过的礼物) 在这种情况下,它首先使用,然后使用。是否先做匹配,然后做“辅助”过滤?还是有使用vs 的更一般规则?谢谢。 问题答案: 是整个查询的一部分,是每个单独联接的一部分。 只能引用以前使用的表的字段。 如果与左表中的记录没有实际匹配,则从右表中返回一条记录