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;
在上述语法中,我们必须指定执行代码的条件。如果语句计算结果为true,它将执行 IF-THEN 和 END-IF 之间的语句。否则,它将执行 END-IF 之后的语句。
IF-THEN 语句的示例
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 块中指定的条件不为true时执行其他语句,则可以使用该语句。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;
在上面的语法中,如果条件为true,就会执行 IF-THEN 分支。否则,它将评估 elseif 条件。当 elseif 条件为true时,它将执行 elseif 语句。如果这个条件也是false的,它将评估下一个 elseif 条件。因此,这里我们将评估多个 elseif-condition,如果 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)
它将给出以下输出:
热门文章
优秀文章