MySQL流程控制函数汇总分析讲解

 更新时间:2023年04月24日 09:01:00   作者:Wen先森  
MySQL流程控制函数包括if、case、while、repeat、loop、leave、iterate等,可以在SQL语句中实现条件判断、循环、跳出等功能,提高了SQL语句的灵活性和功能性

在 MySQL 中,流程控制函数是指可以控制存储过程(stored procedure)或函数(function)中执行流程的语句。以下是几个常用的流程控制函数:

1.IF函数

实现IF……ELSE……的效果。

# 如果expr1为true,则返回expr2,否则返回expr3
IF(expr1,expr2,expr3)

可以看出,IF函数与三元运算符很像,如:

		// 比较最大数
        int a=10;
        int b=5;
        // 比较
        int bigNum=a>b?a:b;

即,将IF函数的三个参数中,expr1是条件表达式,最终结果是true或false,如果条件成立(true)则返回expr2,如果条件不成立(false)则返回expr3。例:

SELECT IF(10>5,10,5) AS bigNum;

2.IFNULL函数

同样是实现IF……ELSE……的效果,相当于IF函数的变种。

# 如果expr1不为NULL,则返回expr1,否则返回expr2
IFNULL(expr1,expr2)

即将原本的条件表达式变形为判断expr1是否为null,不为null就是其本身(expr1),为空则是expr2.

SELECT IFNULL(null,'不空') AS notNull

相当于IF函数的

SELECT IF(null IS NULL,null,'不空') AS notNull

判断expr1是否为空,为空(true)显示expr2,不为空(false)显示expr3

3.CASE函数

case函数有两种不同的效果

switch case

相当于java中的switch case的效果。即switch中的变量表达式的值与case后面的常量比较。

		int week=3;
        switch (week){
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("非法数据");
                break;
        }

用sql表示:

# NOW()函数用于获取当前日期和时间,
# WEEKDAY(date)函数,表示返回date对应的工作日索引,
# 因为索引从0开始,所以加1;也可以不加1,将when的常量改为工作日索引也可
SELECT CASE WEEKDAY(NOW())+1
	WHEN 1 THEN '星期一'
	WHEN 2 THEN '星期二'
    WHEN 3 THEN '星期三'
    WHEN 4 THEN '星期四'
    WHEN 5 THEN '星期五'
    WHEN 6 THEN '星期六'
    WHEN 7 THEN '星期日'	
	ELSE '非法数据'
END AS `week`;

函数结构

case  要判断的变量(字段)或表达式
when  常量1  then  要显示的值1(或语句1);
when  常量2  then  要显示的值2(或语句2);
.......
else  要显示的值n或语句n;
end

注意:

  • 与java不同,直接写case而不是switch,且没有大括号
  • when后面直接加常量值,不用写冒号,用的是then
  • then后面如果是显示的值,不需要加分号;如果then后面加的是语句,就需要加分号。
  • when……then……语句可以有多个。
  • 默认情况用的是else。
  • 结尾用end

4.多重IF

类似于java中的多重if判断。

		int grade=87;
        if (grade>=90){
            System.out.println("优秀");
        }else if (grade>=80){
            System.out.println("良好");
        }else if (grade>=70){
            System.out.println("一般");
        }else if (grade>=60){
            System.out.println("及格");
        }else {
            System.out.println("不及格");
        }

用sql表示:

SELECT id,`name`,chinese,
	CASE
		WHEN chinese>=90 THEN '优秀'
		WHEN chinese>=80 THEN '良好'
		WHEN chinese>=70 THEN '一般'
		WHEN chinese>=60 THEN '及格'
		ELSE '不及格'
	END AS `rank`
FROM student

函数结构:

case
when  条件1  then  要显示的值1或语句1;
when  条件2  then  要显示的值2或语句2;
......
else  要显示的值n或语句n
end

注意:

  • case后面没有加条件
  • when后面是条件,结果是true或false;满足条件执行then,显示后面的值或语句
  • 同样的then后面如果是显示的值,不需要加分号;如果then后面加的是语句,就需要加分号。

到此这篇关于MySQL流程控制函数汇总分析讲解的文章就介绍到这了,更多相关MySQL流程控制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 多种不同的 MySQL 的 SSL 配置

    多种不同的 MySQL 的 SSL 配置

    这篇文章主要介绍了多种不同的 MySQL 的 SSL 配置,非常不错的一篇文章,而且很实用,需要的朋友可以参考下
    2015-03-03
  • MySQL架构设计思想详解

    MySQL架构设计思想详解

    这篇文章主要介绍了MySQL架构设计思想详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • MySQL截取和拆分字符串函数用法示例

    MySQL截取和拆分字符串函数用法示例

    这篇文章主要介绍了MySQL截取和拆分字符串函数用法,结合实例形式分析了mysql针对字符串的截取与拆分函数SUBSTRING及SUBSTRING_INDEX相关使用方法,需要的朋友可以参考下
    2016-09-09
  • mysql 5.7.14 安装配置简单教程

    mysql 5.7.14 安装配置简单教程

    这篇文章主要为大家分享了mysql 5.7.14安装配置方法图文教程,一看就会的mysql 5.7.14安装教程,感兴趣的朋友可以参考一下
    2016-08-08
  • Mysql索引会失效的几种情况分析

    Mysql索引会失效的几种情况分析

    在做项目的过程中,难免会遇到明明给mysql建立了索引,可是查询还是很缓慢的情况出现,下面我们来具体分析下这种情况出现的原因及解决方法
    2014-06-06
  • MySQL进行表之间关联更新的实现方法

    MySQL进行表之间关联更新的实现方法

    在实际编程工作或运维实践中,对MySQL数据库表进行关联更新是一种比较常见的应用场景,针对这样的业务场景,我们来看看有什么方法可以实现关联更新,需要的朋友可以参考下
    2023-10-10
  • mysql仿asp的数据库操作类

    mysql仿asp的数据库操作类

    使用说明: 该类完全按照ADO的习惯书写的,用过ASP的人都觉得ASP连接数据库比PHP好用(这是我的感觉), 但PHP得一个一个API地写,挺累,该类做了完全的封装 创建类的实例时可以指定一个数据库表和选择的数据库,如:new MySQLDB("table","database");
    2008-04-04
  • 解决myBatis中删除条件的拼接问题

    解决myBatis中删除条件的拼接问题

    这篇文章主要介绍了解决myBatis中删除条件的拼接问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 解决Linux下Tomcat向MySQL插入数据中文乱码问题

    解决Linux下Tomcat向MySQL插入数据中文乱码问题

    本文给大家介绍的是如何解决win平台下开发的项目移植到Linux平台后,向MySQL插入数据时中文出现乱码的问题,非常的简单实用,有需要的小伙伴可以参考下
    2018-04-04
  • mysql 字段as详解及实例代码

    mysql 字段as详解及实例代码

    这篇文章主要介绍了mysql 字段as详解,并附实例代码的相关资料,需要的朋友可以参考下
    2016-09-09

最新评论