程序员社区

MySQL系列教程 --- 57、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)  

我们将得到以下输出:

file

IF-THEN-ELSE 语句

如果我们想在 IF 块中指定的条件不为真时执行其他语句,则可以使用此语句。IF-THEN-ELSE 语句的语法如下:

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

在上面的语法中,我们必须指定执行代码的条件。如果语句的计算结果为真,它将执行 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)  

它将给出以下输出:

file

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)  

它将给出以下输出:

file

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 57、MySQL 中的 IF 语句

一个分享Java & Python知识的社区