mysql高级语句2存储过程

CREATE VIEW   视图,可以被当作是虚拟表或存储查询。

视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。
临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。

试图表就是一个select语句的定义 查看视图表的结果 会随着selcet语句的结果改变而改变
create view 试图表名称 as select语句

案例 用视图表求两个表字段无交集

create view 试图表名称 as select distinct 字段 from 表名 union all select distinct 字段  from 表名2
#先创建试图表  去重显示两个表的字段

selcet 字段 from 试图表名称 group by 字段 having count(字段)=1   =1 是无交集  >1是交集
#试图表去重字段 然后显示字段非空值 having 过滤 

修改试图表的原则   两种情况

  1. 如果定义的select语句查询的字段是没有被处理过的源表字段,则可以通过视图表修改源表的数据。
  2. 如果定义的select语句查询的字段被函数或 group by 等处理的字段,则不能直接修改视图表的数据。
     

 CASE :是 SQL 用来做为 IF-THEN-ELSE 之类逻辑的关键字

语法一:

SELECT CASE "字段名"
  WHEN "要求" THEN "结果1"
  WHEN "要求" THEN "结果2"
  ...
  [ELSE "default"]
  END
FROM "表名";

语法二;

SELECT CASE
  WHEN "公式1" THEN "结果1"
  WHEN "公式2" THEN "结果1"
  ...
  [ELSE "default"] END

#ELSE 子句则并不是必须的。

无值'' 和 空值NULL 的区别?

  1. 无值'' 的长度为 0,不占用空间;可以通过 字段名 = '' 或 字段名 != '' 来过滤字段的值是否为无值的行;指定字段使用函数 count(字段) 不会忽略 无值 的行
  2. 空值NULL 的长度为 NULL,占用空间;可以通过 "字段名 is null" 或 "字段名 is not null" 来过滤字段的值是否为NULL的行;指定字段使用函数 count(字段) 会忽略 NULL 的行
     

如果过滤重复数据?

1.删除全部重复数据,一条不留

creat view 试图表名称 as select 字段 from 表名 group by 字段  having  count(字段)>1
#group by 汇总分组 再通过聚合函数查出字段2出现的次数  大于1是有重复的

delete 字段 form 表名 where 字段 in (select name form 视图表)   
#子查询

2.删除重复数据,仅保留一条

create view 视图表名称 as select min(id) from 表名 gruop by store_name
用name字段分组显示出每个id 字段最小的  生成视图表

delete from where id not in  (select id form 视图表名称 )

MySQL 导出导入 CSV文件

vim /etc/my.cnf

[mysqld]
secure_file_priv=""   #允许我们导入导出文件
 
systemctl restart mysqld

#创建目录
mkdir /mysql-output  
#给权限
chmod 777 /mysql-output

MySQL 导出表数据到 CSV文件
select * into outfile '/mysql-output/XXX.csv' fields terminated by ',' enclosed by '"'  lines terminated by '\n' from 表名;

MySQL 导入 CSV文件
load data infile '/mysql-output/XXX.csv' into table 表名 fields terminated by ',' enclosed by '"'  lines terminated by '\n';


fields terminated by ','  设置 字段分隔符
lines terminated by '\n   设置 换行符
enclosed by '"      设置字符值 每个字段的值用双引号括起来

正则表达式  

语法:

SELECT "字段" FROM "表名" WHERE "字段" REGEXP {模式};

存储过程(数据库脚本,就是一组为了完成特定功能的SQL语句集合)

创建和使用存储过程:

  1. use切换库,并修改SQL语句结束符      delimiter $$
  2. 创建存储过程,并定义包含的SQL语句   create procedure 存储过程名()
  3. begin  SQL语句序列;
  4. end$$
  5. 把SQL语句结束符改回分号             delimiter ;
  6. 调用存储过程                        call 存储过程名;
     

查看存储过程  删除存储过程

show create procedure 存储过程名;   #查看存储过程
drop procedure  存储过程名称;     #删除存储过程

存储过程的参数使用

  1. in 参数名 数据类型         #传入参数,调用时参数值可以是纯量值,也可以变量
  2. out 参数名 数据类型       #传出参数,调用时参数值只能是变量
  3. inout 参数名 数据类型    #传入传出参数,调用时参数值只能是变量
DELIMITER $$				
CREATE PROCEDURE Proc1(IN inname CHAR(16))		
-> BEGIN					
-> SELECT * FROM store_info WHERE Store_Name = inname;
-> END $$					
DELIMITER ;					

CALL Proc1('Boston');

存储过程的控制语句

1.条件语句if-then-else ···· end if 
delimiter $$
create procedure proc6(in myname varchar(20), in mysex varchar(10), in myage smallint)
begin
if myage>=18
then 
insert into test02 (name, sex, age, team) values (myname, mysex, myage, '成年组');
else
insert into test02 (name, sex, age, team) values (myname, mysex, myage, '少年组');
end if;
end $$
delimiter ;

2.循环语句while ···· end while
delimiter $$
create procedure proc7()
begin
declare i int;     #declare 创建变量
set i=1;
while i<=50000
do
insert into test03 values (i, concat('student', i));
set i=i+1;
end while;
end $$
delimiter ;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值