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 ...
随机推荐
- POJ2560 Freckles
Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %lld & %llu Description In an epis ...
- Yii 之Session使用
public function actionIndex(){ $session = \YII::$app->session; //判断session是否开启 if(!$session->i ...
- 533. Lonely Pixel II
Given a picture consisting of black and white pixels, and a positive integer N, find the number of b ...
- web信息搜索之目标扫描篇
https://blog.csdn.net/dongfei2033/article/details/78175421
- 关于错误Access Violation和too many consecutive exceptions 解决方法
关于错误Access Violation和too many consecutive exceptions 解决方法 “如果DLL中用到了DELPHI的string类型,则DLL和主程序中都需要加上Sh ...
- 快速掌握RabbitMQ(四)——两种消费模式和QOS的C#实现
本篇介绍一下RabbitMQ中的消费模式,在前边的所有栗子中我们采用的消费者都是EventingBasicConsumer,其实RabbitMQ中还有其他两种消费模式:BasicGet和QueueBa ...
- 洛谷 P1503鬼子进村
题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里 ...
- CS Academy #32 G
题意: 分析: 考虑如何求方案数 dp[i][j]表示i个数字的和为j的方案数,这是个经典问题,转移有两种,一个是填一个数字1,一个是整体加1 然后这个问题并不是求方案数,而是求对应的权值和 我们很容 ...
- 利用systemtap定位ifconfig dropped数据包的原因
http://blog.chinaunix.net/uid-20662820-id-3842431.html 欢迎转载,转载请保留文章的完整性!Author: Tony <tingw.liu ...
- Redhat 5 无法安装elfutils-libelf-devel-0.137问题
http://whr25.blog.sohu.com/263584338.html 问题: RHEL5.5安装oracle11gR2的时候需要安装elfutils-libelf-devel-0.137 ...