• MySQL教程64-MySQL 流程控制函数


    IF函数:判断

    MySQL IF 语句允许您根据表达式的某个条件或值结果来执行一组 SQL 语句。

    要在 MySQL 中形成一个表达式,可以结合文字,变量,运算符,甚至函数来组合。表达式可以返回 TRUE,FALSE 或 NULL,这三个值之一。

    语法结构如下:

    IF(expr,v1,v2)

    其中:表达式 expr 得到不同的结果,当 expr 为真是返回 v1 的值,否则返回 v2.

    【实例】使用 IF(expr,v1,v2) 函数根据 expr 表达式结果返回相应值,输入 SQL 语句和执行结果如下。

    mysql> SELECT IF(1<2,1,0) c1,IF(1>5,'','×') c2,IF(STRCMP('abc','ab'),'yes','no') c3;
    +----+----+-----+
    | c1 | c2 | c3  |
    +----+----+-----+
    |  1 | ×  | yes |
    +----+----+-----+
    1 row in set (0.00 sec)
    View Code

    由执行结果可以看出,在 c1 中,表达式 1<2 所得的结果是 TRUE,则返回结果为 v1,即数值 1;在 c2 中,表达式 1>5 所得的结果是 FALSE,则返回结果为 v2,即字符串 '×';在 c3 中,先用 STRCMP(s1,s2) 函数比较两个字符串的大小,字符串 'abc' 和 'ab' 比较结果的返回值为 1,也就是表达式 expr 的返回结果不等于 0 且不等于 NULL,则返回值为 v1,即字符串 'yes'。

    IFNULL函数:判断是否为空

    MySQL IFNULL 函数是 MySQL 控制流函数之一,它接受两个参数,如果不是 NULL,则返回第一个参数。 否则,IFNULL 函数返回第二个参数。两个参数可以是文字值或表达式。

    函数的语法:

    IFNULL(v1,v2);

    其中:如果 v1 不为 NULL,则 IFNULL 函数返回 v1; 否则返回 v2 的结果。

    【实例】使用 IFNULL(v1,v2) 函数根据 v1 的取值返回相应值。输入 SQL 语句和执行结果如下。

    mysql> SELECT IFNULL(5,8),IFNULL(NULL,'OK'),IFNULL(SQRT(-8),'FALSE'),SQRT(-8);
    +-------------+-------------------+--------------------------+----------+
    | IFNULL(5,8) | IFNULL(NULL,'OK') | IFNULL(SQRT(-8),'FALSE') | SQRT(-8) |
    +-------------+-------------------+--------------------------+----------+
    |           5 | OK                | FALSE                    |     NULL |
    +-------------+-------------------+--------------------------+----------+
    1 row in set (0.00 sec)
    View Code

    由执行结果可以看出,IFNULL(v1,v2) 函数中的参数 v1=5、v2=8,都不为空,即 v1=5 不为空,返回 v1 的值为 5;当 v1=NULL 时,返回 v2 的值,即字符串 'OK';当 v1=SQRT(-8) 时,SQRT(-8) 函数的返回值为NULL,即 v1=NULL,所以返回 v2 为字符串 'false'。

    CASE函数:搜索语句

    除了 IF 函数,MySQL 还提供了一个替代的条件语句 CASE。 MySQL CASE 语句使代码更加可读和高效。

    CASE 语句有两种形式:简单的和可搜索 CASE 语句。

    简单的 CASE 语句

    简单的 CASE 语句就是指使用简单 CASE 语句来检查表达式的值与一组唯一值的匹配。

    简单的 CASE 语句的语法:

    CASE  <表达式>
       WHEN <值1> THEN <操作>
       WHEN <值2> THEN <操作>
       ...
       ELSE <操作>
    END CASE;

    其中:<表达式> 可以是任何有效的表达式。我们将 <表达式> 的值与每个 WHEN 子句中的值进行比较,例如 <值1>,<值2> 等。如果 <表达式> 和 <值n> 的值相等,则执行相应的 WHEN 分支中的命令 <操作>。如果 WHEN 子句中的 <值n> 没有与 <表达式> 的值匹配,则 ELSE 子句中的命令将被执行。ELSE 子句是可选的。 如果省略 ELSE 子句,并且找不到匹配项,MySQL 将引发错误。

    【实例 1】使用 CASE 函数根据表达式的取值返回相应值,输入SQL 语句和执行结果如下

    mysql> SELECT CASE WEEKDAY(NOW()) WHEN 0 THEN '星期一' WHEN 1 THEN '星期二' WHEN 2 THEN '星期三' WHEN 3 THEN '星期四' WHEN 4 THEN '星期五' WHEN 5 THEN '星期六' ELSE '星
    期天' END AS COLUMN1,NOW(),WEEKDAY(NOW()),DAYNAME(NOW());
    +-----------+---------------------+----------------+----------------+
    | COLUMN1   | NOW()               | WEEKDAY(NOW()) | DAYNAME(NOW()) |
    +-----------+---------------------+----------------+----------------+
    | 星期四    | 2020-08-20 10:42:35 |              3 | Thursday       |
    +-----------+---------------------+----------------+----------------+
    1 row in set (0.00 sec)
    View Code

    可搜索的 CASE 语句

    简单 CASE 语句仅允许将表达式的值与一组不同的值进行匹配。 为了执行更复杂的匹配,如范围,则可以使用可搜索 CASE 语句。 可搜索 CASE 语句等同于 IF 语句,但是它的构造更加可读。

    可搜索CASE语句的语法:

    CASE
        WHEN <条件1> THEN <命令>
        WHEN <条件2> THEN <命令>
        ...
        ELSE commands
    END CASE;

    MySQL 分别计算 WHEN 子句中的每个条件,直到找到一个值为 TRUE 的条件,然后执行 THEN 子句中的相应 <命令>。如果没有一个条件为 TRUE,则执行 ELSE 子句中的 <命令>。如果不指定 ELSE 子句,并且没有一个条件为 TRUE,MySQL 将发出错误消息。MySQL 不允许在 THEN 或 ELSE 子句中使用空的命令。 如果您不想处理 ELSE 子句中的逻辑,同时又要防止 MySQL 引发错误,则可以在 ELSE 子句中放置一个空的 BEGIN END 块。

    【实例 2】使用 CASE 函数根据表达式的取值返回相应值,输入SQL 语句和执行结果如下

    mysql> SELECT CASE WHEN WEEKDAY(NOW())=0 THEN '星期一' WHEN WEEKDAY(NOW())=1 THEN '星期二'  WHEN WEEKDAY(NOW())=2 THEN '星期三' WHEN WEEKDAY(NOW())=3 THEN '星期 四' WHE
    N WEEKDAY(NOW())=4 THEN '星期五' WHEN WEEKDAY(NOW())=5 THEN '星期六' WHEN WEEKDAY(NOW())=6 THEN '星期天' END AS COLUMN1,NOW(),WEEKDAY(NOW()),DAYNAME(NOW( ));
    +------------+---------------------+----------------+-----------------+
    | COLUMN1    | NOW()               | WEEKDAY(NOW()) | DAYNAME(NOW( )) |
    +------------+---------------------+----------------+-----------------+
    | 星期 四    | 2020-08-20 10:45:19 |              3 | Thursday        |
    +------------+---------------------+----------------+-----------------+
    1 row in set (0.00 sec)
    View Code

    此例跟上例的返回结果一样,只是使用了 CASE 函数的不同写法,WHEN 后面为表达式,当表达式的返回结果为 TRUE 时取 THEN 后面的值,如果都不是,则返回 ELSE 后面的值。

  • 相关阅读:
    20165222第八周课上补做
    20165222—第八周学习
    20165222《Java程序设计》——实验二 面向对象程序设计
    20165222 结对编程学习
    20165222 第七周学习总结
    20165222 第六周学习总结
    20165222 实验一java开发环境的熟悉
    20165222 第五周学习总结
    JSP
    Servlet
  • 原文地址:https://www.cnblogs.com/no-celery/p/13533757.html
Copyright © 2020-2023  润新知