MySQL IF 语句
IF 语句主要用于实现 MySQL 中的基本条件构造,适用于存储过程。根据特定的条件,它允许我们执行一组 SQL 语句。它返回 True、False 或 NULL 三个值中的一个。
我们可以使用 IF-THEN、IF-THEN-ELSE、IF-THEN-ELSEIF-ELSE 这三种方式,并以 END-IF 结束。让我们详细了解这些语句。
IF-THEN 语句
这个语句根据特定的条件或表达式执行一组 SQL 查询。IF-THEN 语句的语法如下所示:
IF condition THEN
statements;
END IF;
在上述语法中,我们需要为代码执行指定一个条件。如果该语句的评估结果为真,则会执行在IF-THEN和END-IF之间的语句。否则,将会执行跟随在END-IF之后的语句。
示例
IF…ENDIF块与存储的程序一起执行,并以分号结尾,如下例所示。
DELIMITER CREATE PROCEDURE myResult(original_rate NUMERIC(6,2),OUT discount_rate NUMERIC(6,2))
NO SQL
BEGIN
IF (original_rate>200) THEN
SET discount_rate=original_rate*.5;
END IF;
select discount_rate;
END
DELIMITER $$;
接下来,使用两个变量,并将两个变量的值设置如下:
mysql> set @p = 600;
mysql> set @dp = 500;
现在,调用存储过程函数来检查输出。
mysql> call myResult(@p, @dp)
我们将得到以下输出:
IF-THEN-ELSE语句
如果我们希望在IF块中指定的条件不为真时执行其他语句,可以使用此语句。IF-THEN-ELSE语句的语法如下:
IF condition THEN
statements;
ELSE
else-statements;
END IF;
在上述语法中,我们必须指定一个条件来执行代码。如果语句评估为true,则会在IF-THEN和ELSE之间执行语句。否则,它将执行后面的ELSE和END-IF之后的语句。
让我们修改上述的 myResult() 存储过程。因此,首先使用以下命令删除myResult()存储过程:
Mysql> DROP procedure myResult;
接下来,按照下面的方式编写新代码:
DELIMITER CREATE PROCEDURE myResult(original_rate NUMERIC(6,2),OUT discount_rate NUMERIC(6,2))
NO SQL
BEGIN
IF (original_rate>200) THEN
SET discount_rate=original_rate*.5;
ELSE
SET discount_rate=original_rate;
END IF;
select discount_rate;
END
DELIMITER ;
接下来,创建 两个变量 ,并将它们的值设置如下:
mysql> set @p = 150;
mysql> set @dp = 180;
现在,调用存储过程函数以获取输出。
mysql> call myResult(@p, @dp)
它将给出以下输出:
IF-THEN-ELSEIF-ELSE语句
如果我们想要根据多个条件执行语句,可以使用此语句。IF-THEN-ELSE语句的语法如下:
IF condition THEN
statements;
ELSEIF elseif-condition THEN
elseif-statements;
...
ELSE
else-statements;
END IF;
在上述语法中,如果条件为真,则执行IF-THEN分支。否则,将评估elseif条件。当elseif条件为真时,将执行elseif语句。如果此条件也为假,则将评估下一个elseif条件。因此,在这里我们将评估多个elseif条件,如果IF和ELSE-IF中的任何条件都不为真,则执行ELSE分支的语句。
让我们修改上面的myResult()存储过程。因此,首先使用以下命令删除myResult()存储过程:
Mysql> DROP procedure myResult;
接下来,按照下面所示,编写新的代码:
DELIMITER CREATE PROCEDURE myResult(original_rate NUMERIC(6,2),OUT discount_rate NUMERIC(6,2))
NO SQL
BEGIN
IF (original_rate>500) THEN
SET discount_rate=original_rate*.5;
ELSEIF (original_rate<=500 AND original_rate>250) THEN
SET discount_rate=original_rate*.8;
ELSE
SET discount_rate=original_rate;
END IF;
select discount_rate;
END
DELIMITER ;
接下来,创建两个变量,并将其值设置为以下方式:
mysql> set @p = 150;
mysql> set @dp = 150;
现在,调用存储过程函数以获取输出。
mysql> call myResult(@p, @dp)
它将给出如下输出: