迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

MySQL 中的 where 与 having

作者:迹忆客 最近更新:2023/03/13 浏览次数:

今天,我们将了解 MySQL 中的 WHEREHAVING 子句之间的区别。我们将通过代码示例单独理解这些子句,并以表格形式比较它们以突出差异。

MySQL 中的 WHEREHAVING

WHEREHAVING 子句非常相似。这些子句之间的主要区别在于它们与 GROUP BY 一起使用时。

我们不能对聚合数据使用 WHERE 子句,但可以使用 HAVING

我们可以说 WHERE 在分组之前过滤了记录(行),但 HAVING 子句排除了分组后的记录(行)。

要继续这篇文章,我们应该有一个表格。

因此,创建一个 transactions 表,其中包含名为 IDProductMonthOfTransactionAmountInUSD 的四个属性。

示例代码:

#create a table
CREATE TABLE `ms20`.`transactions` (
    `ID` INT NOT NULL AUTO_INCREMENT,
    `Product` VARCHAR(45) NOT NULL,
    `MonthOfTransaction` VARCHAR(20) NOT NULL,
    `AmountInUSD` INT NOT NULL,
    PRIMARY KEY (`ID`));

#insert data into a table
INSERT INTO ms20.transactions(Product, MonthOfTransaction, AmountInUSD) VALUES
('Air Conditioner', 'January', 500),
('Television', 'January', 600),
('Refrigerator', 'January', 550),
('Television', 'March', 600),
('Air Conditioner', 'March', 500),
('Juicer Machine', 'March', 200);

#select all data from the table
SELECT * FROM ms20.transactions;

输出:

在哪里 vs 在 mysql 中 - 交易数据

MySQL 中的 WHERE 子句

在 MySQL 中,我们使用 WHERE 子句过滤记录并仅提取那些满足指定条件的行(记录)。我们可以将它与 SELECT 语句和 UPDATEINSERTDELETE 命令一起使用。

WHERE 子句涉及在使用 JOIN 子句从单个或多个表中检索记录时放置在选定列上的特定条件。我们可以在 WHERE 子句中执行逻辑运算,例如 ANDNOTOR

我们也可以将它们称为布尔条件,在从表中检索信息时必须为(也称为关系)。这些逻辑运算符使用比较运算符,包括 <><=>==<>

示例代码:

SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
WHERE Product in ( 'Television', 'Refrigerator')
GROUP BY Product;

输出:

where vs have in mysql - where 子句输出

MySQL 中的 HAVING 子句

在 MySQL 中,HAVING 子句与 GROUP BY 子句结合使用。使用此子句的目的是根据给定条件进行列操作并应用于聚合数据或组。

HAVING 子句仅返回满足特定条件的组的结果。如果 WHEREHAVING 子句一起使用,WHERE 过滤单个记录(行)。

然后,记录(行)被分组,执行聚合计算,最后,HAVING 过滤组。HAVING 子句检查 GROUP BY 子句创建的组的条件。

在没有 GROUP BY 子句的情况下,HAVING 子句的行为类似于 WHERE 子句。

我们还可以通过将 HAVING 子句与 SELECT 语句结合使用各种聚合函数。聚合(组)方法包括 SUMMAXMINCOUNTAVG

我们可以很容易地将聚合函数与 HAVING 子句一起使用,而如果与 WHERE 子句一起使用,我们将收到一个错误,即组函数的无效使用

示例代码(没有聚合函数):

SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
GROUP BY Product
HAVING Product in ('Television', 'Refrigerator');

输出:

where vs have in mysql - having 子句输出一

示例代码(带有聚合函数):

SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
GROUP BY Product
HAVING sum(AmountInUSD) > 800;

输出:

where vs have in mysql - having 子句输出二

当我们在一个查询中有多个子句时,了解执行顺序很重要。我们必须记住顺序 FWGHSOL(从 F 开始并在 L 结束)才能知道执行顺序,其中 F = FROMW = WHEREG = GROUP BYH = HAVINGS = SELECTO = ORDER BYL = LIMIT

MySQL 中 WHEREHAVING 子句之间的区别

在编写查询以操作数据时,我们必须考虑以下几点。

WHERE 子句 HAVING 子句
在行(记录)操作中实现。 在列(属性)操作中实现。
在聚合计算之前对各个行执行过滤操作。 对聚合(组)数据执行过滤操作。
从满足给定条件的特定行中检索特定数据。 首先检索所有数据,然后根据指定条件进行分离。
我们不能在这个子句中使用聚合方法。 我们可以很容易地在这个子句中使用聚合方法。
它的行为类似于预过滤器,位于 GROUP BY 子句之前。 它的行为类似于后过滤器,位于 GROUP BY 子句之后。
它可以与 DELETE、SELECT 和 UPDATE 语句一起使用。 它只能与 SELECT 语句一起使用。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 MySQL 中声明和使用变量

发布时间:2024/03/26 浏览次数:115 分类:MySQL

当你需要在 MySQL 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。

在 MySQL 中实现刷新权限

发布时间:2024/03/26 浏览次数:211 分类:MySQL

本教程介绍了 MySQL 中的刷新权限命令,用于刷新授权表并影响允许的更改。

在 MySQL 中设置时区

发布时间:2024/03/26 浏览次数:93 分类:MySQL

在本教程中,我们将学习如何在 MySQL 服务器中更改时区。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便