视图+函数

视图的创建语句
  表  t_xx
  视图  view 视图名
  as
  sql  查询语句;
如果师徒的数据不符合我们的需求,那我们就修改视图

#使用视图:
select * from v_stu1
#从视图v_stu1中,查询出家是河南的学生信息
select * from v_stu1 where address like '河南%';
#能否从视图中v_stu1 中,查询出学生的电话 不能的,给我什么用什么
如果想查询到电话怎么办——找出表要——修改视图

修改视图:
	方式一:关键字alter
		alter view 视图名
		as 
		sql 查询语句

	方式二:关键字 replace  如果 视图不存在就创建 存在就修改
		create or replace view 视图名
		as
		sql 查询语句

#删除视图:v_stu3


查询视图:show create view 视图名

对视图进行DML操作(数据的增删改查操作)

对于当前视图的增删改 只能对当前视图的字段进行

#调用v_stu2 查看数据
select * from v_stu2;

#v_stu2中新增一条数据
insert invo v_stu2 values('李','123456789','123456@qq.com');
#创建一个允许增加数据的视图
create view v_stu4
as
select sname,phone,email from student;
#问v_stu4中新增一条数据
insert invo v_stu4 values('李','123456789','123456@qq.com');

/*
向视图新增数据
注意
1、如果低层基表有字段不能为空的,如果我们新增时必须给值,如果给不了就无法新增,也就是说,如果视图不含有非空字段,那是无法进行新增操作的


修改视图的数据

*/

#修改李的学号
update v_stu4 set studentno = '789456' where studentno = '123456';
#查询视图v_stu4
select *from v_stu4;

/*
A、包含以下关键字的sql语句;分组函数、group by、having、distanct、union和union all
B、商量视图
C、

*/
#with check option 限制; 保证视图一致性
传建视图,查询家是河南的
create or replace view v_stu6;
as
selevt stu.studentno,stu.sname,stu.phone
from student stu where stu.address like '河南%';
select *from v_stu6;

#对视图进行新增
insert into v_stu56 values('147258','祝融夫人','555555','云南大理的');
select * from v_stu6;
#查询底层表
select *from student;
#问题:从事图插入的数据和视图要求不一致数据不符合视图的要求
#需求限制从事图插入的数据,数据比较符合师徒的where查询条件
#使用hith check option 限制视图更新

create or replace view v_stu6;
as
selevt stu.studentno,stu.sname,stu.phone
from student stu where stu.address like '河南%';
with check option;
#一旦使用with check option 来约束我们的视图,那么从视图更新数据必须符合我们的查询条件
select *from v_stu6;

#再次添加数据
insert into v_stu6 values('45678222','孟获大王','555555','云南大理的');



1、创建视图v_stu1,查询student表中电话以135开头的同学的姓名、地址、邮箱信息
方式一:
create vuew v_stu1
as
select stu.sname,stu.address,stu.email
from student stu
where stu.phone like'135%';

方式二:
creatr or replace view v_stu1
as
select stu.sname,stu.address,stu.email,stu.phone
from stuende stu
where stu.phone like '135%';



函数
函数的关键字:function

MySQL的存储过程
delimiter $$
create procedure 存储过程名(参数列表)
begin 
   SQL语句;
end$$ 
delimiter;
存储过程:
in代表输入
out代表输出
一种更像java方法的函数
select * from student;
max()
min()  sum()
avg()  count()
聚合函数
new()
concat()

MySQL函数分为两类:
1、类似max() min() sum() avg() count() 较系统函数
   select max()
2、自定义函数:关键字function
  create function 函数名(参数列表) returns 返回值类型
  begin
     SQL语句(函数体)return返回值;
  end
注意:
  1、returns用来标注返回值类型
  2return用来输出返回值
  3、参数列表的语法:参数名,数据类型 没有in out 这些标注  
     有仅有输入参数  参数的个数大于等于04、如果begin...end中只有一句话,是可以省略begin...end(不建议使用)
	

函数分为两种


#无参有返回值  返回李666
create function f_lzb() returns varchar(20)
begin
    return'李666'
end
#调用函数 select
#函数里面返回值不需要接受,使用select就可以查询出来
select f_lzb();

#创建函数,查询学生表返回刘备同学的家庭住址
create funtion f_getAddress() returns varchar(20)
begin
#声明变量作为返回值,来接受地址
#声明局部变量
    declare saddress varchar(20)default'';
#把地址赋值给返回值变量
    select stu.address
    from student stu where stu.sname = '刘备';
end
#调用
select f_getAddress();


/*
有参有返回值的
2.1、给老婆买定西,设计一个算法。输入金额。返回最后回答
小于等于100 返回随便买
小于等于500 返回立即下单
小于等于1000 返回买的值得
小于等于1500 返回咱就得买好的
小于等于2000 返回你喜欢就好
小于等于2500 这个确实是挺好的
*/
create function f_buy(jin) returns varchar(20)
begin
#常见变量接收返回值
  declare huifu varchar(20) default'';
  if jin <= 100 then
     set huifu = '随便买';
  elseif jin<= 500 then;
     set huifu = '立即下单';
  end if;#结束判断
#返回变量
end

select f_buy(150);

*/



create function 函数名(参数名 数据类型)returns 返回值数据类型
begin 
	SQL语句;
	return返回值;
end
注意:
  1、函数关键字 function
  2、函数名 fn_XXX
  3、参数列表组成:参数1 数据类型,参数2,数据类型2
  4、returns s不能少,标注返回值的参数类型
  5、begin...end
  6return 用来输出返回值
     返回值必须符合返回值数据类型
     返回值 有且只有一个 不能没有
  函数和存储过程非常类似
  喊出创建时,也需要delimiter 操作

函数分为两类来学习
  无参有返回值
  没有参数有返回值

create function 函数名() returns 返回值数据类型
begin 
	SQL语句;
	return 返回值
end
案例创建函数,返回李主播奥利给


#案例创建函数,返回李主播奥利给 
create function fn_AOLIGE() returns varchar(20) #定义
begin
	return'李主播奥利给';#返回值
end
#调用函数
select fn_AOLIGE();#不需要传参


无参:
#1、创建函数,求1-100的和 使用while循环+函数完成
creat funtion fn_sum() returns int
begin
#声明计数器
  declare i int default 1;
#求和的变量 用于循环中累加数据
  declare sum int default 0;
#循环判断
  while i<= 100 do
#讲赋值给变量
    set sum = sum + i;
#更新计数器
    set i = i+1;
  end while;#循环结束
  return sum;#输出综合
end
#调用运行
select fn_sum();



有参有返回值:
create function 函数名(参数 数据类型) returns 返回值数据类型
begin
	SQL语句;
	return返回值;
end
参数个数没有限制,但是返回值有且只有一个,不能没有

例题
#1、创建函数,求1-n的和  使用while循环+函数完成
create function fn_sum2(n int) returns int
begin
#声明计数器
declare i int default 1;
#求和的变量 用于循环中类假数据
declare sum int default 0;
#循环判断
while i<= n do
#将值赋给变量
	set sum =sum + i;
#更新计数器
	set i = i + 1;
end while; #循环体结束
return suml;输出总和
end
#带参不太会用
#返回值怎么赋值:返回值都是变量---变量怎么赋值

1、into
select count(*) into 变量

2、set
set 变量 =;

#创建函数,输入电影的上映年份,返回该年份下的电影个数
#思路:先写sql语句,测试完成后再写函数
#先写输入2015年返回该年份下的电影的个数的sql
select count(*) from video_move vm where vm.year = 2'015'
#把2015 换成输入变量 count(*) 赋值个返回值
create function fn_vm(myear varchar(10))returns int
begin
  declare gs int default 1;
  select count(*) into gs #把总电影数赋值返回值变量
  from video_move vm
  where vm.year = myear;
#返回值
  return gs;

end
select fn_vm('2017');


调用函数,只需要传入所需参数,返回值可以动过select 关键字或者

#函数的修改是无法修改原sql的,所以一般函数语法有问题,删除重写
删除函数:
drop function 函数名;

#删除函数
drop function 
查询函数的语法结构
show create function 函数名;

#删除函数
drop function fn_vm;

#fn_sum2
show create function fn_sum;

#1、创建函数,输入电影类型,返回该类型电影的个数
#2、输入A和B,请综合,最终返回出综合


函数和存储过程的区别
共同含义:
  都是一组预先编译好的SQL与剧集和,可以累计额为批处理语句
共同好处(含义):
  1、代码重用
  2、简化操作
  3、减少编译
  4、提升效率

区别:
  存储过程
	1、参数分为 in inout 输入、输出、输入输出
	语法:in |out|inout 参数名 数据类型
	2、返回值 可以有零个可以有多个
	3、存储过程独立执行和使用
  函数:
	1、参数只有一种,是输入参数,没有in |out|inout
	语法:参数名 数据类型
	2、返回值 有且只有一个,不能没有
	3、一般在sql中组合做为组合部分,例如聚合函数
  用处:
    存储过程:适合做批量操作,例如批量的增删改数据
    函数:适合数据处理后只需要返回一个值得操作


在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值