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 ...
随机推荐
- 王室联邦(bzoj 1086)
Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不 ...
- Java Interface 是常量存放的最佳地点吗?(转帖学习,非原创)
Java Interface 是常量存放的最佳地点吗?(转帖学习,非原创) 由于java interface中声明的字段在编译时会自动加上static final的修饰符,即声明为常量.因而inter ...
- Laravel 之Artisan
简介: Artisan是Laravel中自带的命令行工具的名称: 由强大的Symfony Console组件驱动的: 提供了一些对应用开发有帮助的命令: 查看所有可用的Artisan的命令 php a ...
- Debian9初始配置
1 进入root用户 su root 2 修改镜像源:编辑/etc/apt/sources.list文件 nano /etc/apt/sources.list 修改内容如下: deb http://m ...
- JavaScript ES6中,export与export default
自述: 本来是对new Vue()和export default比较懵的,查了一下,发现我理解错了两者的关系,也没意识到export与export default的区别,先简单的记录一下基本概念,后续 ...
- GRYZY- #10. 财富
财富(treasure) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以身高 ...
- KernelHacking
https://kernelnewbies.org/KernelHacking-HOWTO/Debugging_Kernel
- UNIDAC如何驱动MSSQL2000
UNIDAC如何驱动MSSQL2000 如下图,PROVIDER必须设置为PRSQL.默认的PRAUTO,如果操作系统是XP可以,如果是WIN7以上的,不可以. 原因是MSSQL NATIVE 11已 ...
- 关于button中设置文字不显示的问题
这个因为使用的image加载方式是setimage而不是setbackgroundimage导致文字始终出不来.
- 【转】Spring框架深入理解
参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring内部分为Beans, Context 和 ...