MYSQL进阶学习笔记三:MySQL流程控制语句!(视频序号:进阶_7-10)
知识点四:MySQL流程控制语句(7-10)
选择语句:
(IF ELSE ELSE IF CASE 分支)IFNULL函数
IF语法:
语法规则:
IF search_condition THEN statmen_list ;
[SLSEIF search_condition THEN statmen_list];
ELSE statmen_list;
END IF;
--7 流程控制语句之选择语句
DELIMITER //
CREATE PROCEDURE p_test7(IN age INT)
BEGIN
IF age >=18 THEN SELECT '成年人';
ELSE SELECT '未成年人';
END IF;
END
// DELIMITER ;
SET @age =4;
CALL p_test7(@age); SELECT @age; DELIMITER //
CREATE PROCEDURE p_test8(IN age INT)
BEGIN
IF age >=18 AND age < 60 THEN SELECT '成年人';
ELSEIF age >= 60 THEN SELECT '老年人';
ELSE SELECT '未成年人';
END IF;
END
// DELIMITER ;
SET @age =60;
CALL p_test8(@age); SELECT @age;
IF语句测试
CASE语法
CASE语句也用来进行条件判断,其可以实现比IF语句更复杂的条件判断。
CASE语法的基本形势如下:
CASE case_value
WHEN when_value THEN
statement_list;
[WHEN when_value THEN
statement_list];…;
[ELSE statement_list];
END CASE;
--8 流程控制语句之选择语句CASE分支 --默认数据(创建工资表)
CREATE DATABASE mzjj;
USE mzjj; CREATE TABLE salaries(
emp_no INT KEY NOT NULL AUTO_INCREMENT,
salary INT,
from_data DATE DEFAULT '2015-04-01',
to_data DATE DEFAULT '2015-05-01'
)AUTO_INCREMENT=1001; DELIMITER //
CREATE PROCEDURE p_addsalary(IN v_empno INT)
BEGIN
DECLARE addS int;
CASE v_empno
WHEN 1001 THEN SET addS = 1500;
WHEN 1002 THEN SET addS = 2500;
WHEN 1003 THEN SET addS = 3500;
ELSE SET adds =1000;
END CASE;
UPDATE salaries SET salary = addS WHERE emp_no= v_empno;
END
// DELIMITER ;
SET @v_empno =1001;
CALL p_addsalary(@v_empno); SELECT @v_empno; --默认数据(创建员工信息表)
CREATE TABLE employees(
emp_no INT KEY NOT NULL AUTO_INCREMENT,
birth_data DATE DEFAULT '2015-04-01',
first_name VARCHAR(20),
last_name VARCHAR(20),
gender ENUM('M','F'),
hire_data DATE DEFAULT '2015-05-01'
)AUTO_INCREMENT=1001; SELECT emp_no,first_name,last_name,
(CASE gender WHEN 'M' THEN '男'ELSE '女' END) AS '性别' FROM employees;
CASE语句测试
IFNULL函数:
用法:
IFNULL(exp1,exp2)
如果exp1是NULL则返回exp2;否则返回exp1;
示例:
SELECT IFNULL(null,'不是空');
SELECT IFNULL(123,'不是空');
--测试IFNULL函数
UPDATE employees SET first_name=NULL WHERE emp_no =1001;
SELECT IFNULL(first_name,'无名字') FROM employees;
IFNULL函数测试
循环语句:
WHILE语句:
语法规则:
WHILE 条件 DO
内容
END WHILE;
--9 流程控制(WHILE循环语句)
--计算1加到100
DELIMITER //
CREATE PROCEDURE p_addnum()
BEGIN
DECLARE i int DEFAULT 1;
DECLARE addresult int DEFAULT 0;
WHILE i<= 100 DO
SET addresult = addresult +i;
SET i = i+1;
END WHILE;
SELECT addresult;
END
// DELIMITER ;
CALL p_addnum(); --向表中加入1000条数据
DELIMITER //
CREATE PROCEDURE p_insertEmp()
BEGIN
DECLARE maxempno int DEFAULT 0;
DECLARE i int DEFAULT 1;
WHILE i<= 1000 DO
SELECT MAX(emp_no) into maxempno FROM employees;
SET maxempno = maxempno+1;
INSERT INTO employees(emp_no,birth_data, first_name,last_name, gender,hire_data)
VALUES(maxempno,'1990-1-1','jim','ju','M','2000-1-1');
SET i =i+1;
END WHILE;
END
// DELIMITER ;
CALL p_insertEmp();
WHILE语句测试
--任务作业
--更新编号为偶数的gender字段为M DELIMITER //
CREATE PROCEDURE changeEmp()
BEGIN DECLARE maxempno int DEFAULT 0;
DECLARE sex VARCHAR(2) DEFAULT 'M';
DECLARE minempno int DEFAULT 1;
SELECT MAX(emp_no) into maxempno FROM employees;
SELECT MIN(emp_no) into minempno FROM employees;
WHILE minempno <= maxempno DO
CASE minempno%2
WHEN 0 THEN SET sex = 'M';
ELSE SET sex = 'M';
END CASE;
UPDATE employees SET gender = sex WHERE emp_no= minempno;
SET minempno =minempno+1 ;
END WHILE;
END
//
DELIMITER ;
CALL changeEmp(); SELECT * FROM employees; DELIMITER //
CREATE PROCEDURE changeEmp2()
BEGIN DECLARE maxempno int DEFAULT 0;
DECLARE minempno int DEFAULT 1;
SELECT MAX(emp_no) into maxempno FROM employees;
SELECT MIN(emp_no) into minempno FROM employees;
WHILE minempno <= maxempno DO
IF minempno%2=0 THEN UPDATE employees SET gender = 'F' WHERE emp_no= minempno;
END IF;
SET minempno =minempno+1 ;
END WHILE;
END
//
DELIMITER ;
CALL changeEmp2();
任务作业
REPEAT语句:
语法规则:
REPEAT
内容
UNTIL 条件 //推出循环的条件
END REPEAT;
--rapeat测试
DELIMITER //
CREATE PROCEDURE changeEmp1()
BEGIN DECLARE maxempno int DEFAULT 0;
DECLARE sex VARCHAR(2) DEFAULT 'M';
DECLARE minempno int DEFAULT 1;
SELECT MAX(emp_no) into maxempno FROM employees;
SELECT MIN(emp_no) into minempno FROM employees;
REPEAT
if minempno%2 =0 then update employees SET gender='F' WHERE emp_no = minempno;
END IF;
SET minempno = minempno+1;
UNTIL minempno>maxempno
END REPEAT;
END
//
DELIMITER ;
CALL changeEmp1();
REPEAT语句测试
LOOP语句:
语法规则:
LOOP名字:LOOP
内容
IF 条件 THEN
LEAVE LOOP名字;
END IF;
END LOOP;
--loop测试
DELIMITER //
CREATE PROCEDURE changeEmp3() BEGIN
DECLARE maxempno int DEFAULT 0;
DECLARE minempno int DEFAULT 1;
SELECT MAX(emp_no) into maxempno FROM employees;
SELECT MIN(emp_no) into minempno FROM employees; myloop:loop
if minempno%2 =1 then update employees SET hire_data='1900-12-11' WHERE emp_no = minempno;
END IF;
SET minempno = minempno+1;
IF minempno>maxempno THEN LEAVE myloop;
END IF;
END loop;
END
// DELIMITER ;
CALL changeEmp3();
LOOP语句测试
MYSQL进阶学习笔记三:MySQL流程控制语句!(视频序号:进阶_7-10)的更多相关文章
- MYSQL初级学习笔记三:数据的操作DML!(视频序号:初级_24,25,36)
知识点五:数据的操作DML(24,25,36) 插入数据: --测试插入记录INSERT CREATE TABLE IF NOT EXISTS user13( id TINYINT UNSIGNED ...
- MYSQL学习笔记三:日期和时间函数
MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...
- MySql学习笔记三
MySql学习笔记三 4.DML(数据操作语言) 插入:insert 修改:update 删除:delete 4.1.插入语句 语法: insert into 表名 (列名1,列名2,...) val ...
- 基于【 MySql 】二 || mysql详细学习笔记
mysql重点学习笔记 /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysql ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- SQLMAP学习笔记2 Mysql数据库注入
SQLMAP学习笔记2 Mysql数据库注入 注入流程 (如果网站需要登录,就要用到cookie信息,通过F12开发者工具获取cookie信息) sqlmap -u "URL" - ...
- ref:学习笔记 UpdateXml() MYSQL显错注入
ref:https://www.cnblogs.com/MiWhite/p/6228491.html 学习笔记 UpdateXml() MYSQL显错注入 在学习之前,需要先了解 UpdateXml( ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- oracle查询当前用户名下所有表
select * from all_tables where owner='TEST': TEST为用户名,用户名必须是大写. 查看当前登录的用户的表: select table_name from ...
- MongoDB_语法命令
可以通过MongoDB shell 来连接MongoDB服务: ./mongo 进入交互 数据库-->集合-->文档 几个文档就组成了集合,可以设置固定大小的集合,集合就会有过期机制, ...
- C++练习,计算间隔天数
time_t time(time_t *time) 从1970年1月1日到到现在的秒数,如果系统时间不存在,返回1char *ctime(const time_t *time) 返回以:day mon ...
- 并发安全问题之HashMap
原文地址: http://my.oschina.net/xianggao/blog/393990#OSC_h2_1 目录[-] 并发问题的症状 多线程put后可能导致get死循环 多线程put的时候可 ...
- poj2513字典树+欧拉图判断+并查集断连通
题意:俩头带有颜色的木棒,要求按颜色同的首尾相连,可能否? 思路:棒子本身是一条边,以俩端为顶点(同颜色共点),即求是否有无向图欧拉路(每条棒子只有一根, 边只能用一次,用一次边即选一次棒子). 先判 ...
- HDU 6149 Valley Numer II(状压DP)
题目链接 HDU6149 百度之星复赛的题目……比赛的时候并没有做出来. 由于低点只有15个,所以我们可以考虑状压DP. 利用01背包的思想,依次考虑每个低点,然后枚举每个状态. 在每个状态里面任意枚 ...
- <!--#include 引入失败
在html中使用了<!--#include file="a.html">,结果发现页面上并没有引入到a.html页面,F12看是以注释的形式展示出来了,百度了很久. 最 ...
- Ubuntu 16.04通过Snap安装应用程序
16.04LTS可以说是一个不寻常的5年支持版本,同时也带来了Snap应用,并通过Snap可以安装众多的软件包.需要注意的是,Snap是一个全新的软件包架构,但是同样也比其它的软件包大很多. 简单的安 ...
- linux下二机制文件的查看和编辑
linux下很多命令都是二机制:/bin/下的各种命令---/bin/sh./bin/cat./bin/dmesg./bin/hostname等 如何查看这些二机制文件: xxd.hexdump 参考 ...
- fetch 函数分装
1.fetch /** * 封装 fetch */ import { hashHistory } from 'react-router'; export default function reques ...