MySQL中的流程控制函数

目录

1、简介:

2、分类:

3、实际操作

  1.if的操作

  2.ifnull的操作

  3.case when的操作 

  4.case choice when的操作 

1、简介:

        MySQL中的流程控制函数,是用在SQL语句中来根据条件来进行筛选,从而提高我们语句的效率。

2、分类:

函数         功能
IF(VALUE,TRUE,FALSE) 如果value为True则返回为true,否则就返回false
IFNULL(value1,value2) 如果value1的返回值不为空,返回value1,否则返回value2
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE result
END
其中,condition1、condition2等是条件表达式,result1、result2等是与相应条件匹配时返回的结果,result是当没有任何条件匹配时返回的结果。if else的多层嵌套

CASE [expr]

   WHEN [value1] THEN result1

   WHEN [value2] THEN result2     ...

   ELSE result

END

在这个语法中,[expr]是要进行条件判断的表达式,[value1][value2]等是可能的值,result1result2等是与相应值匹配时返回的结果,ELSE是可选的,用于指定当没有值匹配时返回的默认结果。

3、实际操作

  1.if的操作

-- IF(VALUE,TRUE,FALSE)     如果value为True则返回true,否则返回false

select if(3>2,'我是成立的','我好像不成立') as 'result';

  结果:

  2.ifnull的操作

-- IFNULL(VALUE1,VALUE2)    如果value1的返回值不为空,则返回VALUE1,否则返回VALUE2.
select IFNULL((3 > 2),'看看我行不行') as '结果';

-- MySQL中用1来表示true值,0来表示false.
select IFNULL((3 < 2),'看看我行不行') as '结果';

-- MySQL中返回值为null值时,再看看
select IFNULL(null,'看看我行不行') as '结果';

结果1:

 
 

结果2:

结果3:

  3.case when的操作 

在MySQL中,`CASE WHEN`语句可以使用多个`WHEN`和`THEN`子句,用于根据不同的条件返回不同的值或执行不同的操作。下面是`CASE WHEN`语句的基本语法:

```sql
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE result
END
```

在这个语法中,`CASE`是关键字,`condition1`、`condition2`是条件表达式,`result1`、`result2`是与相应的条件匹配时返回的结果,`ELSE`是可选的,用于指定当没有条件匹配时返回的默认结果。

以下是一个示例,演示如何使用`CASE WHEN`语句在查询结果中创建一个新列:

```sql
SELECT column1, column2,
    CASE
        WHEN column3 > 10 THEN 'Large'
        WHEN column3 > 5 THEN 'Medium'
        ELSE 'Small'
    END AS size
FROM table_name;
```

在这个示例中,根据列`column3`的值,`CASE WHEN`语句返回不同的`size`。如果`column3`大于10,将返回'Large',如果大于5但小于等于10,将返回'Medium',否则将返回'Small'。

`CASE WHEN`语句还可以在其他查询操作中使用,例如在`UPDATE`或`INSERT`语句中条件性地设置特定的值。具体用法类似,只是语句的上下文不同。

/*
 CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE result
END
 其中,condition1、condition2等是条件表达式,result1、result2等是与相应条件匹配时返回的结果,result是当没有任何条件匹配时返回的结果。
 */
-- 创建一个学生成绩表
CREATE TABLE stu_score(
  name varchar(30) NOT NULL COMMENT '学生姓名',
  subject varchar(30) COMMENT '学科',
  score DOUBLE COMMENT '学生成绩'
)COMMENT '学生成绩表';
INSERT INTO stu_score(name,subject,score) values ('张三','语文',78),
                                                 ('张三','数学',87),
                                                 ('张三','英语',65),
                                                 ('李四','语文',88),
                                                 ('李四','数学',90),
                                                 ('李四','英语',98),
                                                 ('王五','语文',73),
                                                 ('王五','数学',88),
                                                 ('王五','英语',90);
-- 统计学生成绩的的优秀人数
select name,subject,
    case
        when score > 90 then '优秀'
        when score > 80 then '良好'
        when score > 70 then '中等'
        else '一般'
    end as '成绩等级'
from stu_score;

结果:

  4.case choice when的操作 

在MySQL中,`CASE [expr] WHEN [value]`语句是一种简化版,其实叫他阉割版也行,`CASE WHEN`语句,用于根据给定的表达式和值进行条件判断,只能做相等的情况。类似于Java中的

switch(条件)   

        case(项):

                执行语句

它的一般语法如下:

```sql
CASE [expr]
    WHEN [value1] THEN result1
    WHEN [value2] THEN result2
    ...
    ELSE result
END
```

在这个语法中,`[expr]`是要进行条件判断的表达式,`[value1]`、`[value2]`等是可能的值,`result1`、`result2`等是与相应值匹配时返回的结果,`ELSE`是可选的,用于指定当没有值匹配时返回的默认结果。

以下是一个示例,演示如何使用`CASE [expr] WHEN [value]`语句在查询结果中创建一个新列:

```sql
SELECT column1, column2,
    CASE column3
        WHEN 'A' THEN 'Option 1'
        WHEN 'B' THEN 'Option 2'
        ELSE 'Other Options'
    END AS choice
FROM table_name;
```

在这个示例中,根据列`column3`的值与给定的值进行比较,`CASE [expr] WHEN [value]`语句返回不同的`choice`。当`column3`的值为'A'时,返回'Option 1',当值为'B'时,返回'Option 2',否则返回'Other Options'。

注意:(阉割版)需要注意的是,与完整的`CASE WHEN`语句相比,`CASE [expr] WHEN [value]`语句在条件判断时只能使用相等(=)比较,而不能使用其他比较操作符(如大于、小于等)。

-- 统计学生成绩的的优秀人数
select name,subject,
    case score
        when 90 then '优秀'
        when 80 then '良好'
        when 70 then '中等'
        else '一般'
    end as '成绩等级'
from stu_score;

 结果:

猜你喜欢

转载自blog.csdn.net/qq_57492774/article/details/131653182