谷歌推广网站,下沙建设局网站,运城手机网站建设,个人如何建设网站MySQL高级语句(第二部分)一、视图表 create view1、视图表概述2、视图表能否修改#xff1f;#xff08;面试题#xff09;3、基本语法3.1 创建3.2 查看3.3 删除 4、通过视图表求无交集值 二、case语句三、空值(null) 和 无值(’ ) 的区别四、正则表达式五、存储过程1、简介… MySQL高级语句(第二部分)一、视图表 create view1、视图表概述2、视图表能否修改面试题3、基本语法3.1 创建3.2 查看3.3 删除 4、通过视图表求无交集值 二、case语句三、空值(null) 和 无值(’ ) 的区别四、正则表达式五、存储过程1、简介2、存储过程的优点3、创建存储过程的步骤4、存储过程相关命令4.1 创建存储过程4.2 调用存储过程4.3 查看存储过程4.4 删除存储过程 5、存储过程的参数5.1 in5.2 out5.3 inout 6、存储过程的控制语句6.1 条件语句if-then-else...end if6.2 循环语句while .... end while MySQL高级语句(第二部分)
一、视图表 create view
1、视图表概述
视图可以被当作是虚拟表或存储查询。
视图跟表格的不同是表格中有实际储存数据记录而视图是建立在表格之上的一个架构它本身并不实际储存数据记录。
临时表在用户退出或同数据库的连接断开后就自动消失了而视图不会消失。 视图不含有数据只存储它的定义它的用途一般可以简化复杂的查询。
比如你要对几个表进行连接查询而且还要进行统计排序等操作写sql语句会很麻烦的用视图将几个表联结起来然后对这个视图进行查询操作就和对一个表查询一样很方便。
2、视图表能否修改面试题
视图表保存的是select语句的定义视图表的表数据能否修改视情况而定font。
如果 select 语句查询的字段是没有被处理过的源表字段则可以通过视图表修改源表数据 如果select 语句查询的字段是被 group by语句或 函数 处理过的字段则不可以直接修改视图表的数据。
create view v_store_info as select store_name,sales from store_info;
select * from v_store_info;
update v_store_info set sales1000 where store_nameHouston;在这里插入图片描述
create view v_sales as select store_name,sum(sales) from store_info group by store_name having sum(sales)1000;
select * from v_sales;
update v_sales set store_namexxxx where store_nameLos Angeles;3、基本语法
3.1 创建
语法create view 视图表名 as select 语句;举例create view v_region_sales as select a.region region,sum(b.sales) sales from location a
inner join store_info b on a.store_name b.store_name group by region;
#创建视图表
show tables;3.2 查看
语法select * from 视图表名;select * from v_region_sales;3.3 删除
语法drop view 视图表名;drop view v_region_sales;4、通过视图表求无交集值
create view 视图表名 as select distinct 字段 from 左表 union all select distinct 字段 from 右表;select 字段 from 视图表名 group by 字段 having count(字段)1;#先建立视图表
create view v_union as select distinct store_name from location union all select distinct store_name from store_info;
#合并两个表的store_name字段
select * from v_union;#再通过视图表求无交集
select store_name from v_union group by store_name having count(*)1;
#直接从v_union中调用select语句优化SQL语句二、case语句
在MySQL中CASE语句用于根据给定条件对数据进行条件判断和分支选择。
它可以在SELECT、UPDATE、DELETE语句中使用也可以用于表达式中。
语法
select case (字段名)when 条件1 then 结果1when 条件2 then 结果2...[else 结果n]end
from 表名;# 条件 可以是一个数值或是公式。 else 子句则并不是必须的。#举个例子
select store_name, case store_name when los angeles then sales * 2 when boston then 2000else sales end
new sales,date
from store_info;#将sales的值作为new sales的值返回三、空值(null) 和 无值(’ ) 的区别
1无值的长度为 0不占用空间的而 null 值的长度是 null是占用空间的
2is null 或者 is not null是用来判断字段是不是为 null 或者不是 null不能查出是不是无值的
3无值的判断使用’ ‘或者’ 来处理 和 !代表不等于
4在通过 count( )指定字段统计有多少行数时如果遇到 NULL 值会自动忽略掉遇到无值会加入到记录中进行计算。
create table city (id int,name varchar(20));
insert into city values (1,beijing),(2,nanjing),(3,tianjing);
insert into city values (4,);
insert into city values (5,wuhan);
insert into city (id) values (6);
insert into city values (7,shanghai);
insert into city (id) values (8);
insert into city values (9,jiuquan);
select * from city;select * from city where name is null;
select * from city where name is not null;
#判断字段是不是为 null 或者不是 nullselect * from city where name ;
select * from city where name ! ;
#判断无值select * from city where name or name is null;
#显示空值select count(name) from city;
# NULL值会自动忽略掉无值会加入到记录中
select count(*) from city;
#null值和无值都会加入到记录中四、正则表达式
语法select 字段 from 表名 where 字段 regexp {匹配模式};匹配模式不区分大小写
匹配模式描述实例^匹配文本的开始字符‘^bd’ 匹配以 bd 开头的字符串$匹配文本的结束字符‘qn$’ 匹配以 qn 结尾的字符串.匹配任何单个字符‘s.t’ 匹配任何 s 和 t 之间有一个字符的字符串*匹配零个或多个在它前面的字符‘fo*t’ 匹配 t 前面有任意个 o匹配前面的字符 1 次或多次‘hom’ 匹配以 ho 开头后面至少一个m 的字符串字符串匹配包含指定的字符串‘clo’ 匹配含有 clo 的字符串p1|p2匹配 p1 或 p2‘clo’ 匹配含有 clo 的字符串[…]匹配字符集合中的任意一个字符‘[abc]’ 匹配 a 或者 b 或者 c[^…]匹配不在括号中的任何字符[^ a b] 匹配不包含 a 或者 b 的字符串{n}匹配前面的字符串 n 次‘g{2}’ 匹配含有 2 个 g 的字符串{n,m}匹配前面的字符串至少 n 次至多m 次‘f{1,3}’ 匹配 f 最少 1 次最多 3 次
举例select * from store_info where store_name regexp ^[a-g];
#匹配以字母a-g开头的数据记录select * from store_info where store_name regexp Hou;
#至少出现一次Houselect * from store_info where store_name regexp os;
#匹配包含字符串os的数据记录select * from store_info where store_name regexp ho|bo;
select * from store_info where store_name regexp Ho|Bo;
#匹配store_info表中包含ho或者bo的数据记录select * from store_info where store_name regexp b{1};
#匹配出现一次字母b的五、存储过程
存储过程也叫做数据库脚本MySQL脚本SQL脚本
1、简介
存储过程是一组为了完成特定功能的sql语句集合。
存储过程在使用过程中是将常用或者复杂的工作预先使用sql语句写好并用一个指定的名称存储起来这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时只需要调用它即可。存储过程在执行上比传统sql速度更快、执行效率更高。
2、存储过程的优点
1执行一次后会将生成的二进制代码驻留缓冲区提高执行效率 2sql语句加上控制语句的集合灵活性高 3在服务器端存储客户端调用时降低网络负载 4可多次重复被调用可随时修改不影响客户端调用 5可完成所有的数据库操作也可控制数据库的信息访问权限
3、创建存储过程的步骤
1先修改SQL语句结束符
delimiter $$
2创建存储过程
3把结束符改回分号
delimiter ;
4调用存储过程
call 存储过程名;
4、存储过程相关命令
4.1 创建存储过程
delimiter $$
#将语句的结束符号从分号;临时改为两个$$(可以是自定义)
create procedure proc()
#创建存储过程过程名为proc不带参数
- begin
#过程体以关键字 begin 开始
- select * from store_info;
#过程体语句
- end $$
#过程体以关键字 end 结束
delimiter ;
#将语句的结束符号恢复为分号delimiter $$
create procedure proc()
- begin
-.....(要执行的命令)
- select * from store_info;
- end $$
delimiter ;
#举例delimiter $$
create procedure proc1()
begin
create table kkk2 (id int,name varchar(10),age int,sex char(2),primary key (id));
insert into kkk2 values (1,xx,11,男);
insert into kkk2 values (2,yy,22,女);
insert into kkk2 values (3,zz,33,男);
insert into kkk2 values (4,ww,44,男);
select * from kkk2;
end $$delimiter ;
show tables;4.2 调用存储过程
call 存储过程名;call proc1;
#调用存储过程才能看到创建的表和表数据
show tables;4.3 查看存储过程
show create procedure [数据库.]存储过程名;
#查看某个存储过程的具体信息show create procedure 存储过程名\G;show procedure status [like %存储过程名%] \G;
#模糊匹配查看4.4 删除存储过程
存储过程内容的修改方法是通过删除原有存储过程之后再以相同的名称创建新的存储过程。
如果要修改存储过程的名称可以先删除原存储过程再以不同的命名创建新的存储过程。
语法
drop procedure if exists 存储过程名;
#仅当存在时删除
#不添加 if exists 时如果指定的过程不存在则报错5、存储过程的参数
参数功能in 输入参数表示调用者向过程传入值传入值可以是字面量或变量out 输出参数表示过程向调用者传出值(可以返回多个值)传出值只能是变量inout 输入输出参数既表示调用者向过程传入值又表示过程向调用者传出值值只能是变量,传入传出值必须是同一数据类型
5.1 in
delimiter $$
create procedure proc1(in in_name char(16)) begin select * from store_info where store_name in_name;end $$
delimiter ; call proc1(boston);
call proc1(huston);
call proc1(Los Angeles);
#调用存储过程proc1会根据变量的值返回目标在表数据中对应的数据
#in_name为自定义变量名5.2 out
基本格式delimiter $$
create procedure 存储过程名(in 传入参数名 传入参数数据类型,out 传出参数名 传出参数数据类型)
begin
select 字段 into 传出参数名 from 表名 where 字段传入参数名;
end $$
delimiter ;call 存储过程名(参数值变量名)
#传出参数的值只能用变量获取#举个例子delimiter $$
create procedure proc2(in myname char(10), out outname int)
begin
select sales into outname from store_info where store_name myname;
end $$
delimiter ;
#建一个名为 proc1 的存储过程
#存储过程接收一个字符参数 myname并将与其匹配的 store_info 表中的 sales 值存储到一个整数参数 outname 中call proc2(Houston, out_sales);
select out_sales;5.3 inout
基本格式delimiter $$
create procedure 存储过程名(into 参数名 参数数据类型)
begin
select 字段 into 传出参数名 from 表名 where 字段参数名;
end $$
delimiter ;set 变量名 传入值
#变量赋值传入值
call 存储过程名(变量名)
#传入传出参数的值只能用变量
select 变量名
#此时变量内容应该为传出值
delimiter $$
create procedure proc3(inout insales int)
begin
select count(sales) into insales from store_info where sales insales;
end $$
delimiter ;
set inout_sales1000;
call proc3(inout_sales);
select inout_sales;#创建了一个名为 proc4 的存储过程
#存储过程接受一个输入输出参数 insales并通过查询 store_info 表获取 sales 值小于 insales 的记录数量并将结果存储到参数 insales 中。
#通过 call 语句调用该存储过程并使用 select 语句查看存储在变量 inout_sales 中的值。 6、存储过程的控制语句
create table t (id int(10));
insert into t values(10);6.1 条件语句if-then-else…end if
if 条件表达式 thenSQL语句序列1
elseSQL语句序列2
end if;delimiter $$
create procedure proc4(in pro int)
begin
declare var int;
set varpro*2;
if var10 then
update t set idid1;
else
update t set idid-1;
end if;
end $$delimiter ;call proc4(6);
#pro6#举例
delimiter $$
create procedure proc5(in input_age int)
begin
if input_age 30 then
update kkk2 set sex 女 where age 30;
else
update kkk2 set sex 男 where age 30;
end if;
end $$delimiter ;
select * from kkk2;
call proc5(33);
select * from kkk2;
call proc5(22);
select * from kkk2;6.2 循环语句while … end while
while 条件表达式
doSQL语句序列set 条件迭代表达式;
end while;create table t1 (id int);delimiter $$
create procedure proc6()
begin
declare i int(10);
set i0;
while i6 do
insert into t1 values(i);
set ii1;
end while;
end $$ delimiter ;call proc6;
select * from t1;举例
#创建一张表有一万条数据
#id name
#1 student1
#2 student2
delimiter $$
create procedure proc7()
begin
declare i int;
set i1;
create table t2 (id int ,name varchar(20));
while i10000 do
insert into t2 values(i,concat(student,i));
set ii1;
end while;
end $$ #student学号做拼接
delimiter ;call proc7;
select * from t2; 文章转载自: http://www.morning.gtbjc.cn.gov.cn.gtbjc.cn http://www.morning.blxor.com.gov.cn.blxor.com http://www.morning.hxcuvg.cn.gov.cn.hxcuvg.cn http://www.morning.txqgd.cn.gov.cn.txqgd.cn http://www.morning.rfmzc.cn.gov.cn.rfmzc.cn http://www.morning.htqrh.cn.gov.cn.htqrh.cn http://www.morning.xlxmy.cn.gov.cn.xlxmy.cn http://www.morning.fxygn.cn.gov.cn.fxygn.cn http://www.morning.ckhpg.cn.gov.cn.ckhpg.cn http://www.morning.tbjtm.cn.gov.cn.tbjtm.cn http://www.morning.bpmns.cn.gov.cn.bpmns.cn http://www.morning.xnkh.cn.gov.cn.xnkh.cn http://www.morning.jbhhj.cn.gov.cn.jbhhj.cn http://www.morning.jksgy.cn.gov.cn.jksgy.cn http://www.morning.jfgmx.cn.gov.cn.jfgmx.cn http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn http://www.morning.jhgxh.cn.gov.cn.jhgxh.cn http://www.morning.pqwhk.cn.gov.cn.pqwhk.cn http://www.morning.rddlz.cn.gov.cn.rddlz.cn http://www.morning.splkk.cn.gov.cn.splkk.cn http://www.morning.nzmhk.cn.gov.cn.nzmhk.cn http://www.morning.phechi.com.gov.cn.phechi.com http://www.morning.bsplf.cn.gov.cn.bsplf.cn http://www.morning.wptrm.cn.gov.cn.wptrm.cn http://www.morning.csnch.cn.gov.cn.csnch.cn http://www.morning.mhmcr.cn.gov.cn.mhmcr.cn http://www.morning.bmhc.cn.gov.cn.bmhc.cn http://www.morning.bhznl.cn.gov.cn.bhznl.cn http://www.morning.qxlgt.cn.gov.cn.qxlgt.cn http://www.morning.jhfkr.cn.gov.cn.jhfkr.cn http://www.morning.fhqsm.cn.gov.cn.fhqsm.cn http://www.morning.mtktn.cn.gov.cn.mtktn.cn http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn http://www.morning.fqpyj.cn.gov.cn.fqpyj.cn http://www.morning.yptwn.cn.gov.cn.yptwn.cn http://www.morning.bljcb.cn.gov.cn.bljcb.cn http://www.morning.qtrlh.cn.gov.cn.qtrlh.cn http://www.morning.wgzzj.cn.gov.cn.wgzzj.cn http://www.morning.zwzwn.cn.gov.cn.zwzwn.cn http://www.morning.kqyyq.cn.gov.cn.kqyyq.cn http://www.morning.kqqk.cn.gov.cn.kqqk.cn http://www.morning.mgskc.cn.gov.cn.mgskc.cn http://www.morning.kfclh.cn.gov.cn.kfclh.cn http://www.morning.dbrpl.cn.gov.cn.dbrpl.cn http://www.morning.zhffz.cn.gov.cn.zhffz.cn http://www.morning.okiner.com.gov.cn.okiner.com http://www.morning.mgwpy.cn.gov.cn.mgwpy.cn http://www.morning.kgltb.cn.gov.cn.kgltb.cn http://www.morning.qzqfq.cn.gov.cn.qzqfq.cn http://www.morning.qprtm.cn.gov.cn.qprtm.cn http://www.morning.xkwrb.cn.gov.cn.xkwrb.cn http://www.morning.srmdr.cn.gov.cn.srmdr.cn http://www.morning.pznqt.cn.gov.cn.pznqt.cn http://www.morning.tmrjb.cn.gov.cn.tmrjb.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.qpmwb.cn.gov.cn.qpmwb.cn http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn http://www.morning.srbbh.cn.gov.cn.srbbh.cn http://www.morning.lzbut.cn.gov.cn.lzbut.cn http://www.morning.xxlz.cn.gov.cn.xxlz.cn http://www.morning.pzbqm.cn.gov.cn.pzbqm.cn http://www.morning.kgnnc.cn.gov.cn.kgnnc.cn http://www.morning.rsjng.cn.gov.cn.rsjng.cn http://www.morning.dqwkm.cn.gov.cn.dqwkm.cn http://www.morning.mmynk.cn.gov.cn.mmynk.cn http://www.morning.pybqq.cn.gov.cn.pybqq.cn http://www.morning.lynkz.cn.gov.cn.lynkz.cn http://www.morning.grjh.cn.gov.cn.grjh.cn http://www.morning.qdxwf.cn.gov.cn.qdxwf.cn http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn http://www.morning.qyfrd.cn.gov.cn.qyfrd.cn http://www.morning.flqbg.cn.gov.cn.flqbg.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.bnrnb.cn.gov.cn.bnrnb.cn http://www.morning.jbpodhb.cn.gov.cn.jbpodhb.cn http://www.morning.kycxb.cn.gov.cn.kycxb.cn http://www.morning.pmbcr.cn.gov.cn.pmbcr.cn http://www.morning.wcft.cn.gov.cn.wcft.cn http://www.morning.qnbsx.cn.gov.cn.qnbsx.cn http://www.morning.zxxys.cn.gov.cn.zxxys.cn