原文链接:https://blog.devart.com/mysql-if-function-and-statement-with-examples.html
作者:DbForge Team
MySQL 中有两种类型的 IF:IF 语句和 IF 函数。两者彼此不同。
在本文中,我们将解释它们的多样性并展示使用示例。此外,我们将回顾其他 MySQL 函数。
MySQL IF 语句
IF 语句允许您验证条件。 MySQL IF语句分为三种类型:
IF-THENIF-THEN-ELSEIF-THEN-ELSEIF-ELSE
MySQL IF-THEN 语句
您可以使用 IF-THEN 根据条件运行 SQL 查询集合。这是语句语法:
IF condition THEN
statements;
END IF;
如果指定条件的计算结果为:
- true –
IF-THEN和END-IF之间的语句将被执行 - false – 将应用
END-IF块之后的语句
MySQL IF-THEN-ELSE 语句
要在 IF 块中的条件不为真时执行语句,可以使用 IF-THEN-ELSE,语法如下所示:
IF condition THEN
statements;
ELSE
else-statements;
END IF;
如果指定条件是:
- true –
IF-THEN和ELSE之间的语句将被执行 - false – 将执行
ELSE和END-IF之后的语句
MySQL IF-THEN-ELSEIF-ELSE 语句
使用 IF-THEN-ELSEIF-ELSE,您可以根据多个条件运行语句,语法如下:
IF condition THEN
statements;
ELSEIF elseif-condition THEN
elseif-statements;
...
ELSE
else-statements;
END IF;
让我们回顾一下每个区块。如果 IF-THEN 中的条件是:
- true – 语句将被执行
- false –
elseif条件将被评估
如果 ELSEIF-THEN 中的 elseif 条件为:
- true –
elseif语句将被执行 - false – 将评估下一个
elseif条件
如果在 IF-THEN 和 ELSEIF-THEN 块中都没有真正的条件,则将应用 else 语句。
MySQL IF 语句示例
在本节中,我们将回顾 IF语句用法的示例。
在下面的语句中,我们使用 IF-THEN 声明以下条件:如果 STATUS 列中所有空条目的总和大于 0,那么在输出中您将看到消息“We have rows with NULL!!!”
DELIMITER $$
CREATE PROCEDURE GetEmtyStatus(
OUT Message VARCHAR(100))
BEGIN
DECLARE sum_null DECIMAL(10,2) DEFAULT 0;
SELECT COUNT(*) INTO sum_null FROM TASKS WHERE status IS NULL;
IF sum_null > 0 THEN
SET Message = 'We have rows with NULL!!!';
END IF;
END$$
DELIMITER ;

在这个 IF-THEN-ELSE 语句中,我们指定了两个条件:
- 如果
STATUS列中所有已完成记录的总和为 0,则会出现消息“We have rows with NULL!!!” - 如果
STATUS列中所有已完成记录的总和不为 0,您将看到“We do not have rows with NULL!!!”在输出中
DELIMITER $$
CREATE PROCEDURE GetEmptyStatusNotNull(
OUT Message VARCHAR(100))
BEGIN
DECLARE sum_null DECIMAL(10,2) DEFAULT 0;
SELECT COUNT(*) INTO sum_null FROM TASKS WHERE STATUS IS NOT NULL;
IF sum_null = 0 THEN
SET Message = 'We have rows with NULL!!!';
ELSE
SET Message = 'We do not have rows with NULL!!!' ;
END IF;
END$$
DELIMITER ;

在这个 IF-THEN-ELSE 语句中,我们指定了两个条件:
- 如果 STATUS 列中所有已完成记录的总和为 0,则会出现消息“We have rows with NULL!!!”
- 如果 STATUS 列中所有已完成记录的总和不为 0,您将看到“We do not have rows with NULL!!!”在输出中
DELIMITER $$
CREATE PROCEDURE GetEmptyStatusNotNull(
OUT Message VARCHAR(100))
BEGIN
DECLARE sum_null DECIMAL(10,2) DEFAULT 0;
SELECT COUNT(*) INTO sum_null FROM TASKS WHERE STATUS IS NOT NULL;
IF sum_null = 0 THEN
SET Message = 'We have rows with NULL!!!';
ELSE
SET Message = 'We do not have rows with NULL!!!' ;
END IF;
END$$
DELIMITER ;

使用 IF-THEN-ELSEIF-ELSE 语句,我们设置了多个条件:
- 如果 STATUS 列中所有空值的总和小于 3,则消息“We have rows with NULL!!!”将显示
- 如果 STATUS 列中所有空值的总和大于 3,您将看到“我们有 NULL,但结果是有效的!!!”
如果该值不满足前两个条件,则会出现消息“We do not have rows with NULL!!!”在输出中
DELIMITER $$
CREATE PROCEDURE CheckStatus(
OUT Message VARCHAR(100))
BEGIN
DECLARE sum_null DECIMAL(10,2) DEFAULT 0;
SELECT COUNT(*) INTO sum_null FROM TASKS WHERE STATUS IS NULL;
IF sum_null < 3 THEN
SET Message = 'We have rows with NULL!!!';
ELSEIF sum_null>3 THEN
SET Message = 'We have NULL, but result is valid!!!';
ELSE
SET Message = 'We do not have rows with NULL!!!' ;
END IF;
END$$
DELIMITER ;

MySQL 函数
介绍
在本节中,我们将探索以下 MYSQL 函数:IF、NULLIF 和 IFNULL。
什么是 MySQL 功能?
MySQL 中的函数由一组带有某些参数的 SQL 语句组成,这些参数执行任务或操作并返回一个值作为结果。
例如,MySQL Version() 函数返回 MySQL 数据库的当前版本。
IF 函数:定义、语法和用法
注意 IF函数和 IF 语句是不一样的。
IF 函数返回指定条件的值,语法如下:
IF(expr,if_true_expr,if_false_expr)
如果 expr 计算结果为真(它不为 NULL),则该函数返回 if_true_expr。否则,它返回 if_false_expr。根据使用方式,IF 函数返回数值或字符串。
例子
让我们回顾一下IF函数的一些示例。
MySQL IF 函数的简单示例
IF 函数接受三个表达式,如果第一个为真、非 NULL 且非零,则返回第二个表达式。否则,函数返回第三个表达式。
在本例中,由于 1 小于 2,函数将返回 NO:
SELECT IF(1>2, 'YES', 'NO');
在下面的语句中,IF 函数将返回:
- 3 – 如果条件为真
- 5 – 如果条件为假
SELECT IF(300<500, 3, 5);
此外,您可以使用 STRCMP 的 MySQL IF 函数来比较两个字符串。以下语句将返回:
- YES – 如果
test和test1相同 - NO – 如果
test和test1不同
SELECT IF(STRCMP("test","test1"), "YES", "NO");
具有聚合函数的 MySQL IF 函数
聚合函数计算多个值并提供单个值作为结果。将 IF 函数与聚合函数一起使用有助于检索特定输出。
在本节中,我们将回顾一些可与 IF 函数一起使用的聚合函数。
MySQL SUM IF
例如,如果您想知道本月已完成或仍计划的工作任务数,可以将该函数与 SUM 聚合函数一起使用,如以下查询所示:
SELECT
SUM(IF(status = 'Completed', 1, 0)) AS Completed
FROM
tasks;

在上面的查询中,如果任务状态为已完成或已计划,IF函数返回1或0。SUM函数根据IF函数的返回值确定已计划和已完成任务的总数。
MySQL IF 函数计数
可以将 IF 函数与 MySQL COUNT 函数结合使用。我们使用以下查询在 Tasks 表中选择任务的状态:
SELECT DISTINCT
status
FROM
orders
ORDER BY status;
SELECT DISTINCT
status
FROM
tasks
ORDER BY status;

通过结合 IF 函数和 COUNT,我们可以找出在任何给定时间每个状态有多少任务。由于 COUNT 函数不计算 NULL 值,因此如果状态不处于选定状态,则 IF 函数返回 NULL,否则返回 1。看看下面的查询:
SELECT
COUNT(IF(status = 'Completed', 1, NULL)) Completed,
COUNT(IF(status = 'Reopened', 1, NULL)) Reopened,
COUNT(IF(status = 'In Progress', 1, NULL)) 'In Progress',
COUNT(IF(status = 'In Review', 1, NULL)) 'In Review',
COUNT(IF(status = 'Planned', 1, NULL)) 'Planned'
FROM
tasks;
通过使用 GROUP BY 子句和 COUNT 函数,您也可以在不使用 IF 函数的情况下获得类似的结果,如下所示:
SELECT status, COUNT(STATUS)
FROM tasks
GROUP BY status;

NULLIF 函数:定义、语法和用法
MySQL NULLIF 用于比较两个表达式:
NULLIF(expr1, expr2)
如果两个表达式相等,则该函数返回 NULL,否则返回第一个表达式。让我们尝试一下:
SELECT NULLIF(25, 25);

如您所见,两个表达式相等,这就是函数返回 NULL 的原因。
IFNULL 函数:定义、语法和用法
MySQL IFNULL 用于检查指定表达式中的任何 NULL 值:
IFNULL(expr_1, expr_2)
如果表达式不是 NULL,则函数返回 expr_1。否则,如果表达式为 NULL,则返回 expr_2。因此,例如,如果您运行:
SELECT IFNULL(NULL, 500);
你会得到这样的输出:

该函数返回 500,因为表达式为 NULL。
使用 MySQL IF 函数显示 N/A 而不是 NULL
让我们创建一个演示 MySQL 表 Company。 Employees 表中的许多员工在 city 列中没有数据,因此,当我们选择员工时,city 列显示 NULL 值。看看下面的查询:
SELECT
employeeNumber, employeeName, age, city
FROM
employees;
为了提高输出,如果 city 为 NULL,我们可以使用 IF 函数返回 N/A,如以下查询所示:
SELECT
employeeNumber,
employeeName,
IFNULL(city, 'N/A'),
age
FROM
employees;

结论
在本文中,我们找出了 MySQL IF 语句和 IF 函数之间的区别,并回顾了其他 MySQL 函数。此外,我们还展示了它们的一小部分用法变化。实际上,有很多 MySQL 语句、查询和函数。这就是为什么数据库管理员必须拥有一个可靠且易于使用的工具来促进他们的日常工作。例如,dbForge Studio for MySQL 可以成为您数据库开发、管理和管理不可或缺的助手。该工具具有丰富的功能,您可以在其中找到代码完成和代码格式化等等。有关 dbForge Studio for MySQL 的更多信息。




