一、视图
1.视图的创建
CREATE VIEW 视图名AS查询语句;
例1:
create view myvasselect avg(salary),job_idfrom employeesgroup by job_id;
例2:创建视图myv1,要求查询电话号码一’011’开头的员工姓名和工资、邮箱
create or replace view myv1asselect last_name,salary,emailfrom employeeswhere phone_number like '011%';
例3:创建视图myv3,要求查询部门的最高工资高于12000的部门信息
create or replace view myv2asselect max(salary) mx,department_idfrom employeesgroup by department_idhaving max(salary)>12000;select d.*,m.mxfrom departments dinner join myv2 mon d.department_id=m.department_idwhere m.mx>12000;
2. 视图的修改
方式一:
CREATE OR REPLACE VIEW 视图名AS查询语句;
例:
create or replace view myvasselect avg(salary),job_idfrom employeesgroup by job_id;
方式二:
ALTER 视图名AS查询语句;
例:
alter view myvasselect avg(salary),job_idfrom employeesgroup by job_id;
3. 视图的删除
DROP VIEW 视图名,视图名;
4. 视图的查看
DESC 视图名;
5. 视图的更新
具备以下特点的视图不允许更新:
1.包含以下关键字:distinct、group up、having、union\union all
2.常量视图
create or replace view myvasselect 'john' NAME;
3.select中包含子查询
4.多表连接
5.from一个不能更新的视图
6.where子句的子查询引用了from子句中的表
二、变量
系统变量: 全局变量会话变量 自定义变量 用户变量局部变量1.系统变量
说明:变量由系统提供,不是用户自定义,属于服务器层面
会话变量
作用域:仅仅针对与当前会话(连接)有效
语法:
说明:全局变量(global)、会话变量(session)。session可省略
1. 查看所有系统变量show global|【session】 variables;2. 查看满足条件的部分系统变量show global|【session】 variables like 条件;3. 查看指定的某个系统变量的值select @@global|【session】.系统变量名;4.为某个系统变量赋值方式一:set global|【session】 系统变量名 = 值;方式二:set @@global|【session】.系统变量名 = 值;
2.自定义变量
说明:变量是用户自定义的,不由系统提供
使用步骤:声明、赋值、使用(查看、比较、运算等)
(1)用户变量
**作用域:**针对与当前会话(连接)有效,同会话变量
声明并初始化
set @用户变量名=值;或set @用户变量名:=值;或select @用户变量名=值;
赋值(更新用户变量的值)
方式一:set @用户变量名=值;或set @用户变量名:=值;或select @用户变量名=值;方式二:select 字段 into 用户变量名from 表;
(2)局部变量
**作用域:**仅仅在定义它的begin end中有效
应用在begin end中的第一句话
声明并初始化
declare 变量名 类型;declare 变量名 类型 default 值;
赋值
方式一:set 局部变量名=值;或set 局部变量名:=值;或select 局部变量名=值;方式二:select 字段 into 局部变量名from 表;
使用
select 局部变量名;
三、存储过程和函数
存储过程和函数:类似于Java中的方法
好处:
提高代码的重用性简化操作减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
1.存储过程
含义
一组预先编译好的SQL语句的集合,理解成批处理语句
分类
无返回无参仅仅带in类型,无返回有参仅仅带out类型,有返回无参既带in又带out,有返回有参带inout,有返回有参
注意:in、out、inout都可以在一个存储过程中带多个
(1)创建存储过程
语法
create procedure 存储过程名(in|out|inout 参数名 参数类型,...)begin存储过程体end
注意
1、存储过程的结尾需要设置新的结束标记
delimiter 新的结束标记示例:delimiter $CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)BEGINsql语句1;sql语句2;END $2、存储过程体中可以有多条sql语句,如果仅仅一条sql语句,则可以省略begin end3、参数模式:参数前面的符号的意思in:该参数只能作为输入 (该参数不能做返回值)out:该参数只能作为输出(该参数只能做返回值)inout:既能做输入又能做输出
(2)调用存储过程
call 存储过程名(实参列表)
2.函数
存储过程:可以有0给返回,也可以由多个返回。是和做批量插入、批量更新
函数:有且仅有1个返回,适合做处理数据后返回一个结果
(1)创建
语法
create function 函数名(参数列表) returns 返回类型begin函数体end
注意
1.参数列表 包含两部分:参数名 参数类型
2.函数体:肯定会有return语句,如果没有会报错。return 值
3.函数体中仅有一句话,则可以省略begin end
4.使用delimiter语句设置结束标记
(2)调用
select 函数名(参数列表)
四、流程控制结构
1.分支结构
(1)if函数
if(表达式1,表达式2,表达式3)
如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值
(2)case结构
情况1:类似Java的switch语句,一般用于实现等值判断
case 变量|表达式|字段when 要判断的值 then 返回的值1;when 要判断的值 then 返回的值2;...else 返回的值n;end case;
情况2:类似Java的嵌套if语句,一般用于实现区间判断
casewhen 条件1 then 返回的值1或语句1;when 条件2 then 返回的值2或语句1;...else 返回的值n或语句n;end case;
特点
1.
可以作为表达式嵌套在其他的语句中使用,可以放在 任何地方;
可以作为独立的语句去使用,只能放在begin end中
2.else可以省略,如果省略了else,并且所有when条件都不满足,则返回null
(3)if结构
if 条件1 then 语句1;elseif 条件2 then 语句2;...【else 语句n;】end if;
只能应用在begin end中
2.循环结构
分类:while、loop、repeat
循环控制:
iterate:类似于continue
leave:类似于break
(1)while
【标签:】while 循环条件 do循环体;end while 【标签】;
(2)loop
【标签:】loop循环体;end loop 【标签】;
不使用leave为死循环
(3)repeat
【标签:】repeat循环体;until 结束循环条件end repeat 【标签】;
如果觉得《尚硅谷李玉婷老师MySQL课程--视图 变量 存储过程和函数 流程控制结构》对你有帮助,请点赞、收藏,并留下你的观点哦!