MySQL操作之select(3)

一、空值和无值

  • 无值的长度为 0,不占用空间的;而 NULL 值的长度是 NULL,是占用空间的。
  • IS NULL 或者 IS NOT NULL,是用来判断字段是不是为 NULL 或者不是 NULL,不能查出是不是无值的。
  • 无值的判断使用=’‘或者<>’'来处理。<> 代表不等于。
  • 在通过 count()指定字段统计有多少行数时,如果遇到 NULL 值会自动忽略掉,遇到无值会加入到记录中进行计算。
SELECT length(NULL), length(''), length('1');

在这里插入图片描述

二、MySQL的正则表达式

匹配模式			描述									    实例
^ 				匹配文本的开始字符 						^bd’ 匹配以 bd 开头的字符串
$ 				匹配文本的结束字符 						‘qn$’ 匹配以 qn 结尾的字符串
. 				匹配任何单个字符							‘s.t’ 匹配任何 s  t 之间有一个字符的字符串
* 				匹配零个或多个在它前面的字符 				‘fo*t’ 匹配 t 前面有任意个 o
+ 				匹配前面的字符 1 次或多次					‘hom+ 匹配以 ho 开头,后面至少一个m 的字符串
字符串 			匹配包含指定的字符串 						‘clo’ 匹配含有 clo 的字符串
p1|p2 			匹配 p1  p2 							‘bg|fg’ 匹配 bg 或者 fg
[...] 			匹配字符集合中的任意一个字符 				[abc] 匹配 a 或者 b 或者 c
[^...] 			匹配不在括号中的任何字符 					[^ab] 匹配不包含 a 或者 b 的字符串
{n} 			匹配前面的字符串 n  					    ‘g{2} 匹配含有 2  g 的字符串
{n,m}			匹配前面的字符串至少 n 次,至多m 		    ‘f{1,3} 匹配 f 最少 1 次,最多 3 
语法:SELECT "栏位" FROM "表名" WHERE "栏位" REGEXP ' ';
例:
use plane
select * from text2 where store_name regexp '^H';
select * from text2 where store_name regexp 'ei|Lo';

在这里插入图片描述
在这里插入图片描述

三、存储过程

1、概念

存储过程是一组为了完成特定功能的SQL语句集合。

存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。

2、存储过程的优点
  • 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
  • SQL语句加上控制语句的集合,灵活性高
  • 在服务器端存储,客户端调用时,降低网络负载
  • 可多次重复被调用,可随时修改,不影响客户端调用
  • 可完成所有的数据库操作,也可控制数据库的信息访问权限
3、创建存储过程
格式:
DELIMITER $$							#将语句的结束符号从分号;临时改为两个$$(可以是自定义)
CREATE PROCEDURE xxx()					#创建存储过程,过程名为xxx,不带参数
 BEGIN                                  #过程体以关键字 BEGIN 开始
   sql语句;                             #过程体语句
 END $$								    #过程体以关键字 END 结束
DELIMITER ;                             #将语句的结束符号恢复为分号

例:
delimiter $$
create procedure info()
  begin
  select * from text2;
  end $$
delimiter ;

在这里插入图片描述

4、调用存储过程
CALL 过程名;
例:
call info;

在这里插入图片描述

5、查看存储过程
SHOW CREATE PROCEDURE [数据库.]存储过程名;		#查看存储过程的具体信息

例:
show create procedure cha_info;
show procedure status like '%info'\G  #查看存储过程的状态,但不能查看具体命令

在这里插入图片描述

在这里插入图片描述

6、存储过程参数
  • N 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
  • OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
  • INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
delimiter $$
create procedure fun(in inname char(20))
  begin
  select * from text2 where store_name = inname;
  end $$
delimiter ;

call test1('Beijing');

在这里插入图片描述
在这里插入图片描述

7、删除存储过程
  • 存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。
DROP PROCEDURE 过程名;    #仅当存在时删除,如果不存在,就会报错
DROP PROCEDURE IF EXISTS 过程名;   #使用if exists如果存在就删除,不存在则不执行删除。
例:
drop procedure if exists log;

在这里插入图片描述

8、存储过程控制
create table dd (id int);
insert into dd values(10);

在这里插入图片描述

(1)条件语句
delimiter $$
create procedure log(in shu int)
 begin
 declare var int;
 set var=shu*2;
 if var>=10 then
 update dd set id=id+1;
 else
 update dd set id=id-1;
 end if;
 end $$
 
delimiter ;

call log(5);
call log(4);

在这里插入图片描述
在这里插入图片描述

(2)循环语句
delimiter $$
create procedure log2()
 begin
 declare var int;
 set var=0;
 while var<6 do
 insert into dd values(var);
 set var=var+1;
 end while;
 end $$
 
delimiter ;

call log2;

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值