zoukankan      html  css  js  c++  java
  • 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 后面的值。

  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/no-celery/p/13533757.html
Copyright © 2011-2022 走看看