MySQL IF 语句

总结_:_在本教程中,您将学习如何使用MySQL IF 语句根据指定条件执行一段 SQL 代码。

请注意,MySQL 有一个IF()函数,它与 IF 本教程中描述的语句不同。

该 IF 声明有三种形式:简单的 IF-THEN 声明, IF-THEN-ELSE 声明和 IF-THEN-ELSEIF- ELSE 陈述。

MySQL简单 IF-THEN 语句

该 IF-THEN 语句允许您根据指定的条件执行一组 SQL 语句。下面说明了该 IF-THEN 语句的语法:

IF condition THEN 
   statements;
END IF;

在这个语法中:

  • 首先,指定要执行的代码的条件 IF-THEN 和 END IF 。如果 condition 计算结果为 TRUE ,则 IF-THEN 和之间的语句 END IF 将执行。否则,控制将传递到 END IF .
  • 其次,指定 condition 计算结果为 时将执行的代码 TRUE 。

我们将使用 customers 示例数据库中的表进行演示:

请参阅以下 GetCustomerLevel() 存储过程。

DELIMITER $$

CREATE PROCEDURE GetCustomerLevel(
    IN  pCustomerNumber INT, 
    OUT pCustomerLevel  VARCHAR(20))
BEGIN
    DECLARE credit DECIMAL(10,2) DEFAULT 0;

    SELECT creditLimit 
    INTO credit
    FROM customers
    WHERE customerNumber = pCustomerNumber;

    IF credit > 50000 THEN
        SET pCustomerLevel = 'PLATINUM';
    END IF;
END$$

DELIMITER ;

存储过程 GetCustomerLevel() 接受两个参数: pCustomerNumber 和 pCustomerLevel 。

  • 首先,从表中选择 creditLimit 指定的客户并将其存储在局部变量 中。 pCustomerNumber customers credit
  • 然后,如果客户的信用额度大于,则将该 OUT 参数的值设置为。 pCustomerLevel PLATINUM 50,000

此语句查找信用额度大于 的所有客户 50,000 :

SELECT 
    customerNumber, 
    creditLimit
FROM 
    customers
WHERE 
    creditLimit > 50000
ORDER BY 
    creditLimit DESC;

这是部分输出:

这些语句调用 GetCustomerLevel() 客户 141的存储过程并显示 OUT 参数的值 pCustomerLevel :

CALL GetCustomerLevel(141, @level);
SELECT @level;

由于客户 141 的信用额度大于 50,000 ,因此其级别设置 PLATINUM 为预期。

MySQL IF-THEN-ELSE 语句

如果您想 condition 在 IF 分支中的 不计算为时执行其他语句 TRUE ,您可以使用 IF-THEN-ELSE 如下语句:

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

在此语法中,如果 condition 计算结果为 TRUE ,则 statements 介于 IF-THEN 和 ELSE 执行之间。否则, else-statements 在 ELSE 和之间 END IF 执行。

让我们修改 GetCustomerLevel() 存储过程。

首先,删除 GetCustomerLevel() 存储过程:

DROP PROCEDURE GetCustomerLevel;

然后, GetCustomerLevel() 使用新代码创建存储过程:

DELIMITER $$

CREATE PROCEDURE GetCustomerLevel(
    IN  pCustomerNumber INT, 
    OUT pCustomerLevel  VARCHAR(20))
BEGIN
    DECLARE credit DECIMAL DEFAULT 0;

    SELECT creditLimit 
    INTO credit
    FROM customers
    WHERE customerNumber = pCustomerNumber;

    IF credit > 50000 THEN
        SET pCustomerLevel = 'PLATINUM';
    ELSE
        SET pCustomerLevel = 'NOT PLATINUM';
    END IF;
END$$

DELIMITER ;

在这个新的存储过程中,我们包含了 ELSE 分支。如果 credit 不大于 50,000 ,我们将客户级别设置为和 NOT PLATINUM 之间的块。 ELSE END IF

此查询查找信用额度小于或等于 的客户 50,000 :

SELECT 
    customerNumber, 
    creditLimit
FROM 
    customers
WHERE 
    creditLimit <= 50000
ORDER BY 
    creditLimit DESC;

这张图显示了部分输出:

以下语句调用客户编号的存储过程 447 并显示 OUT 参数值 pCustomerLevel :

CALL GetCustomerLevel(447, @level);
SELECT @level;

mysql if else 语句 - 输出

客户的信用额度 447 不足 50,000 ,因此,在该声明中 ELSE 分支执行,并设置的值 OUT 参数 pCustomerLevel 来 NOT PLATINUM 。

MySQL IF-THEN-ELSEIF-ELSE 语句

如果要根据多个条件有条件地执行语句,请使用以下 IF-THEN-ELSEIF-ELSE 语句:

IF condition THEN
   statements;
ELSEIF elseif-condition THEN
   elseif-statements;
...
ELSE
   else-statements;
END IF;

在此语法中,如果 condition 计算结果为 TRUE ,则 statements 在 IF-THEN 分支执行; 否则,下一个 elseif-condition 被评估。

如果 elseif-condition 评估为 TRUE ,则 elseif-statement 执行;否则,下一个 elseif-condition 被评估。

该 IF-THEN-ELSEIF-ELSE 声明可以有多个 ELSEIF 分支。

如果 IF and 中没有条件 ELSE IF 计算为 TRUE , else-statements 则 ELSE 分支中的 将执行。

我们将修改 GetCustomerLevel() 存储过程以使用该 IF-THEN-ELSEIF-ELSE 语句。

首先,删除 GetCustomerLevel() 存储过程:

DROP PROCEDURE GetCustomerLevel;

然后,创建 GetCustomerLevel() 使用该 IF-THEN-ELSEIF-ELSE 语句的新存储过程。

DELIMITER $$

CREATE PROCEDURE GetCustomerLevel(
    IN  pCustomerNumber INT, 
    OUT pCustomerLevel  VARCHAR(20))
BEGIN
    DECLARE credit DECIMAL DEFAULT 0;

    SELECT creditLimit 
    INTO credit
    FROM customers
    WHERE customerNumber = pCustomerNumber;

    IF credit > 50000 THEN
        SET pCustomerLevel = 'PLATINUM';
    ELSEIF credit <= 50000 AND credit > 10000 THEN
        SET pCustomerLevel = 'GOLD';
    ELSE
        SET pCustomerLevel = 'SILVER';
    END IF;
END $$

DELIMITER ;

在这个存储过程中:

  • 如果信用大于 50,000 ,则客户等级为 PLATINUM 。
  • 如果信用小于或等于 50,000 且大于 10,000 ,则客户级别为 GOLD 。
  • 否则,客户的级别为 SILVER 。

这些语句调用存储过程 GetCustomerLevel() 并显示客户的级别 447 :

CALL GetCustomerLevel(447, @level); 
SELECT @level;

如果您使用信用额度为 10000 或更少的客户测试存储过程,您将获得输出为 SILVER .

在本教程中,您学习了如何使用 MySQL IF 语句根据指定条件有条件地执行代码块。