SQL中where和having子句之间的区别

作者: Laura McKinney
创建日期: 1 四月 2021
更新日期: 3 七月 2024
Anonim
oracle 06028 【掌握】HAVING子句
视频: oracle 06028 【掌握】HAVING子句

内容


WHERE和HAVING子句主要用于SQL查询的语句中,这些允许我们通过使用特定的谓词来限制结果关系中的组合。 WHERE和HAVING之间的主要区别在于WHERE子句指定选择条件的条件 元组(行) 关系,包括加入条件(如果需要)。另一方面,HAVING子句在 团体 被选中而不是放在单个元组上。

的SQL 代表 结构化查询语言;它是用于从数据库访问数据的综合性或声明性数据库语言。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较依据哪里拥有
基本的在行操作中实现。在列操作中实现。
应用于单排汇总的行或组。
资料撷取它仅根据条件从特定行中获取特定数据。首先,获取完整的数据,然后根据条件进行分离。
汇总功能无法出现在WHERE子句中。可以出现在HAVING子句中。
用于SELECT和其他语句,例如UPDATE,DELETE或其中之一。不能在没有SELECT语句的情况下使用。
充当预过滤器后置过滤器
通过...分组在WHERE之后。来之前。

凡条款的定义

SQL WHERE子句 用于描述从单个表中检索数据或通过与多个表联接检索数据时的条件。如果满足给定条件,则仅从表中返回特定值。 WHERE子句用于渗透记录并仅检索必要的记录。


SQL还实现了逻辑连接词 , 要么 在WHERE子句中,也称为 布尔值 条件;条件必须为true才能检索元组。逻辑连接词表达式的操作数涉及比较运算符,例如 <, <=, >, >=, =<>。这些比较运算符比较字符串和算术表达式。可以在 选择 语句以及UPDATE中 删除 陈述。

让我们举个例子。下表显示为“营业额表格由组成产品‘和‘销售额‘属性。

编写以下查询来计算 总销售额 电话和扬声器。

SELECT产品,总和(销售额)AS Total_sales,来自(电话,扬声器)GROUP BY产品中的销售产品;

输出之后的结果是输出,其中首先过滤行,检索电话和扬声器行,然后执行聚合功能。

有条款的定义

SQL提供 HAVING子句 可以与 通过...分组 条款。该HAVING子句有助于检索满足某些条件的组的值。在选择过程中,WHERE子句还可以与HAVING子句一起使用,WHERE子句过滤单个行。然后对行进行分组,并执行汇总计算,最后,HAVING子句过滤组。


不使用GROUP BY关键字时,其行为与WHERE相同。诸如min,max,avg,sum和count之类的Group函数只能出现在两个子句中:SELECT和HAVING子句。它在与属性组中每个值对应的元组上提供条件。唯一满足条件的记录集将显示为结果。

在这里,我们以与WHERE子句相同的示例为例,并考虑相同的“营业额‘桌子。当我们要计算 总销售额 使用HAVING子句的电话和扬声器,我们将编写以下查询。

SELECT产品,总和(销售额)AS总计,来自销售组的总销售额,按产品所属的产品(电话,扬声器);

该查询产生以下输出,其中首先检索产品,然后执行聚合函数(求和),最后过滤组,这与WHERE子句不同。

当我们只想找到那些 总销售额 大于1000。查询可以写为:

SELECT产品的总和(销售额)AS按销售分组的Total_sales按产品总和(销售额)> 1000;

产生的输出是:

尽管有HAVING,但仍不能使用WHERE子句执行此操作,因为WHERE子句不能与聚合函数一起使用,因此会产生错误。

  1. WHERE子句在行操作中使用并应用于单行,而HAVING子句在列操作中使用并可应用于汇总的行或组。
  2. 在WHERE子句中,根据所应用的条件获取所需的数据。相反,HAVING子句获取整个数据,然后根据条件进行分离。
  3. 诸如min,sum,max,avg之类的聚合函数永远不会与WHERE子句一起出现。相反,这些功能可以出现在HAVING子句中。
  4. 没有SELECT语句不能使用HAVING子句。相反,WHERE可以与SELECT,UPDATE,DELETE等一起使用。
  5. WHERE子句充当预过滤器,而HAVING子句充当后过滤器。
  6. WHERE子句与GROUP BY一起使用时,位于GROUP BY之前。这表示在执行汇总计算之前WHERE过滤器行。另一方面,HAVING在GROUP BY之后,这意味着它会在执行汇总计算后进行过滤。

结论

WHERE和HAVING子句的工作方式相同,不同之处在于HAVING子句流行的附加功能。 HAWING子句可以有效地使用聚合函数,而WHERE不能使用聚合函数进行操作。