首页 > 数据库 >【19.0】MySQL进阶知识之流程控制

【19.0】MySQL进阶知识之流程控制

时间:2024-01-29 21:57:08浏览次数:25  
标签:语句 CASE END 进阶 WHILE num statements MySQL 19.0

【零】各种语言中的流程控制语句

【1】Python

if 条件:
  子代码
elif 条件:
  子代码
else:
  子代码

【2】JavaScript

if(条件){
  子代码
}else if(条件){
  子代码
}else{
  子代码
}

【3】MySQL

  • if 语句
if 条件 then
      子代码
elseif 条件 then
      子代码
else
      子代码
end if;
  • while 语句
DECLARE num INT ;
SET num = 0 ;
WHILE num < 10 DO
  SELECT num ;
  SET num = num + 1 ;
END WHILE ;

【一】什么是流程控制

  • CASE:根据表达式的值来决定返回哪个结果。它主要用于处理非确定性的情况,例如用户选择不同的选项或者数据库中存在不同的数据。
  • IFELSE:根据条件判断是否执行某个操作。它主要用于简单的逻辑判断。
  • WHILEUNTIL:当某条件满足时重复执行一段代码。它可以用于循环执行某个操作直到满足某个条件为止。
  • FOR:重复执行一段代码直到满足结束条件。它主要用于遍历数组或集合。

【二】IF语句

【1】介绍

  • IF语句用于在满足条件时执行一组语句,否则执行另一组语句。它的基本语法如下:
IF condition THEN
    statements;
ELSE
    statements;
END IF;
  • 其中,condition是一个条件表达式,如果为真,则执行第一组语句;否则执行第二组语句。

【2】示例

SELECT 
    IFNULL(Bonus, 0) AS Bonus
FROM 
    Employees;
  • 检查员工的奖金是否存在,如果不存在则返回0。

【三】CASE语句

【1】介绍

  • CASE语句用于基于多个条件执行不同的操作。它分为两种形式:
    • 简单CASE和搜索CASE。

【2】简单CASE语句的基本语法

CASE expression
    WHEN value1 THEN
        statements;
    WHEN value2 THEN
        statements;
    ...
    ELSE
        statements;
END CASE;
  • 其中,expression是待比较的表达式,当它等于某个值时,执行相应的语句。

【3】搜索CASE语句的基本语法

CASE
    WHEN condition1 THEN
        statements;
    WHEN condition2 THEN
        statements;
    ...
    ELSE
        statements;
END CASE;
  • 在搜索CASE语句中,每个WHEN子句后面跟着一个条件表达式,当某个条件为真时,执行相应的语句。

【4】示例

SELECT 
    CASE 
        WHEN Salary > 5000 THEN 'High'
        ELSE 'Low'
    END AS SalaryGroup,
    COUNT(*) AS EmployeeCount
FROM 
    Employees
GROUP BY 
    SalaryGroup;
  • 根据员工的薪水将其分为“高薪”和“低薪”两类,并统计每类员工的数量。

【四】WHILE语句

【1】介绍

  • WHILE语句允许你在满足条件的情况下反复执行一组语句。它的基本语法如下:
WHILE condition DO
    statements;
END WHILE;
  • 只要condition为真,statements将被不断执行。

【2】示例

SET i = 1;
WHILE i <= 5 DO
    SELECT CONCAT('The number is: ', i) AS Number;
    SET i = i + 1;
END WHILE;
  • 在这个例子中,我们反复打印出数字1到5。

【五】LOOP语句

【1】介绍

  • LOOP语句用于无限循环执行一组语句,直到遇到LEAVE语句或满足特定条件时才退出循环。它的基本语法如下:
LOOP
    statements;
    IF condition THEN
        LEAVE;
    END IF;
END LOOP;
  • 你可以在循环中使用LEAVE语句来手动退出循环。

【2】示例

SET i = 1;
LOOP
    SELECT CONCAT('The number is: ', i) AS Number;
    SET i = i + 1;
    IF i > 10 THEN
        LEAVE;
    END IF;
END LOOP;

【六】FOR语句

【1】介绍

  • FOR语句是一种特殊的循环语句,它可以让你在一组范围内迭代并执行一系列语句。它的基本语法如下:
FOR var IN start, increment, end DO
    statements;
END FOR;
  • 这个语句会从start开始,每次递增increment的值,一直循环到end,然后退出循环。

【2】示例

SET i = 1;
FOR j IN 1, 2, 6 DO
    SELECT CONCAT('The number is: ', i) AS Number;
    SET i = i * j;
END FOR;
  • 在这个例子中,我们计算1到6的所有数的乘积,并在每次迭代后打印当前的乘积。

【六】模板参考

【1】if 判断

DELIMITER //
CREATE PROCEDURE proc_if()
BEGIN
    DECLARE i INT DEFAULT 0;
    IF i = 1 THEN
        SELECT 1;
    ELSEIF i = 2 THEN
        SELECT 2;
    ELSE
        SELECT 7;
    END IF;
END //
DELIMITER ;

【2】while 循环

DELIMITER //
CREATE PROCEDURE proc_while()
BEGIN
    DECLARE num INT DEFAULT 0;
    WHILE num < 10 DO
        SELECT num;
        SET num = num + 1;
    END WHILE;
END //
DELIMITER ;

标签:语句,CASE,END,进阶,WHILE,num,statements,MySQL,19.0
From: https://www.cnblogs.com/dream-ze/p/17995430

相关文章

  • 【18.0】MySQL进阶知识之函数
    【一】什么是函数跟存储过程是有区别的,存储过程是自定义函数,函数就类似于内置函数注意与存储过程的区别,mysql内置的函数只能在sql语句中使用!【二】字符串函数【0】介绍CONCAT(str1,str2,...):将多个字符串连接成一个字符串。SUBSTRING(str,start,length):返回字符......
  • 【22.0】MySQL进阶知识之锁机制
    【一】什么是锁机制我们可以通过一个很简单的比喻来理解事务的锁机制。比如同一个办公室的同事们都想使用打印机打印文件如果不加以控制可能出现两个人同时打印不同的内容在一个文件里就会引起内容混乱。于是,我们就引入了锁的概念当有并发的多个事务同时操作同一份......
  • 【21.0】MySQL进阶知识之事务隔离机制
    【一】数据库读现象的本质是数据库在高并发场景下多个同时执行的事务带来的影响。【二】数据库三大读现象在数据库中,不同的事务隔离级别可能会导致脏读(DirtyRead)、不可重复读(Non-repeatableRead)和幻读(PhantomRead)等问题的出现。【1】脏读(1)概述事务1和事务2并发执行......
  • MySQL数据库小结
    【一】登陆mysql-uroot-p123456【二】服务启动和停止【1】Windows(1)方式一计算机右击管理服务【右击计算机管理---中间服务与应用程序---双击服务---下面点击标准---即可查看每个软件是否启动服务的状态(可以直接输入要查询的软件名称,再回车键即可)。】(2)管理员身份(cmd)......
  • linux利用shell+crontab自动备份mysql数据库
    一.准备条件,得先安装一个mysql数据库mysql5.7数据库安装教程https://www.cnblogs.com/magepi/p/16983507.html 二.然后准备编写shell脚本编写备份单个库shell脚本#!/bin/bash#保存备份个数,备份3天数据number=3#备份保存路径backup_dir=/opt/mysqlbackup#日期dd=......
  • 记一次MySQL从节点服务器宕机重启后,从节点出现主键冲突异常的处理
    环境MySQL5.7非GTID模式多线程复制。现象某MySQL数据库从节点因故障宕机(因故障直接宕机,非正常关闭),重启之后发现复制状态异常,showslave的结果中Slave_SQL_Running为No,错误代码为1062errorcode,从系统表performance_schema.replication_applier_status_by_worker以及errorl......
  • MySQL-基础
    1.DQL语句完整语法和执行顺序select...from...where...groupby...having...orderby...limit...顺序:51234672.添加外键altertableempaddconstraintf_keyforeignkey(dept_id)referencesdept(id)onupdatecascadeondeletecascade;dept为父表,id为......
  • MySQL迁移人大金仓kingbase
    前言:前段时间接到一个任务,说是数据库要由mysql改成人大金仓,项目代码也需要修改适配(另一个同事负责),而我则是负责数据库的迁移工作,期限是七天(2024-01-26已上线),在这之前我甚至都没听过人大金仓这个名词,而且也没有相关文档的交接更没有技术人员支撑,起初我还让项目负责人去跟集团的DBA......
  • MySQL金额数字转为大写中文
    MySQL版本:5.7.34-log*通过创建函数的方法,目前可以实现整数金额的转换,网上暂未找到MySQL版本的故自己参照其他数据库版本的改编了一下,*仅供参考!!!使用方法:selectrmb(10000)CREATEDEFINER=`root`@`%`FUNCTION`rmb_upper`(jeint)RETURNSvarchar(200)DETERMINISTICBE......
  • 配置mysql (Redhat)
    前提准备:MySQL下载 https://dev.mysql.com/downloads/mysql/ 当前安装版本5.71.检查是否安装mysql:rpm-aq|grepmysql 如果有输出则先停止服务:servicemysqldstart批量删除包rpm-eXXX--nodeps2.检查mariadb:rpm-qa|grepmariadb如果有输出则删除相关包 rpm-e......