暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【译】 MySQL IF – 函数和语句(附示例)

原创 Hklopp 2022-06-23
4570

原文链接: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-THEN
  • IF-THEN-ELSE
  • IF-THEN-ELSEIF-ELSE

MySQL IF-THEN 语句
您可以使用 IF-THEN 根据条件运行 SQL 查询集合。这是语句语法:

IF condition THEN 
  statements;
END IF;

如果指定条件的计算结果为:

  • true – IF-THENEND-IF 之间的语句将被执行
  • false – 将应用 END-IF 块之后的语句

MySQL IF-THEN-ELSE 语句
要在 IF 块中的条件不为真时执行语句,可以使用 IF-THEN-ELSE,语法如下所示:

IF condition THEN
   statements;
ELSE
   else-statements;
END IF;

如果指定条件是:

  • true – IF-THENELSE 之间的语句将被执行
  • false – 将执行 ELSEEND-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-THENELSEIF-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 ;

4.png
在这个 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 ;

5.png
在这个 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 ;

6.png
使用 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 ;

7.png
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 – 如果 testtest1 相同
  • NO – 如果 testtest1 不同
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;

企业微信截图_20220623113642.png

在上面的查询中,如果任务状态为已完成或已计划,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;

8.png
通过结合 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;

9.png
NULLIF 函数:定义、语法和用法

MySQL NULLIF 用于比较两个表达式:

NULLIF(expr1, expr2)

如果两个表达式相等,则该函数返回 NULL,否则返回第一个表达式。让我们尝试一下:

SELECT NULLIF(25, 25);

10.png
如您所见,两个表达式相等,这就是函数返回 NULL 的原因。

IFNULL 函数:定义、语法和用法

MySQL IFNULL 用于检查指定表达式中的任何 NULL 值:

IFNULL(expr_1, expr_2)

如果表达式不是 NULL,则函数返回 expr_1。否则,如果表达式为 NULL,则返回 expr_2。因此,例如,如果您运行:

SELECT IFNULL(NULL, 500);

你会得到这样的输出:

11.png
该函数返回 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;

12.png

结论

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论