MySQL数据库高级SQL语句及存储过程

目录

一、高级SQL语句

(一)case语句

1.语法定义

2.示例

(二)空值(NULL) 和 无值(' ') 

1.区别

2.示例

(1)字符长度

(2)判断方法

① 空值(NULL)

② 无值(' ') 

(3)count()统计

(三)正则表达式

1.语法

2.示例

二、存储过程

(一)定义

(二)使用过程

(三)优点

(四)创建存储过程

1.修改SQL语句结束符

2.创建存储过程

3.把结束符改回分号

4.调用存储过程

5.示例

(五)查看存储过程

1.语法

2.示例

(六)存储过程的参数

1.in 输入参数

(1)语法

(2)示例

2.out 输出参数

(1)语法

(2)示例

​编辑

3.inout输入输出参数

(1)语法

(2)示例

(七)删除存储过程

1.语法

2.示例

(八)存储过程的控制语句

1. if 条件语句

(1)语法

(2)示例

① 准备一个表

② 创建

③查看结果

2. while 循环语句

(1)语法

(2)示例

三、实操一次性往数据库中插入上万条数据

(一)存储过程实现上万数据插入

(二)shell脚本实现上万数据插入


一、高级SQL语句

(一)case语句

1.语法定义

根据一个字段的条件设置一个新的字段的值

select case ("字段名")when "条件1" then "结果1"when "条件2" then "结果2"...[else "结果N"]end
from "表名";
# "条件" 可以是一个数值或是公式。 else 子句则并不是必须的。

2.示例

先准备location和store_info两个表格

select Store_Name, case Store_Name when 'Los Angeles' then Sales * 2   #查询到Los Angeles字段时,Sales的值*2when 'Boston' then 2000             #查询到Boston字段时,Sales的值为2000else Sales                          #查询到其余字段时,Sales的值不变end 
"New Sales",Date                      #将查询结果取别名为New Sales并和Date字段一起输出
from Store_Info;

(二)空值(NULL) 和 无值(' ') 

1.区别

空值(NULL)无值(' ') 
长度NULL0
判断方法IS NULL 或者 IS NOT NULL=''或者<>''
count()统计自动忽略不会忽略

2.示例

(1)字符长度
select length(NULL), length(''), length('1');
#查询空值、无值、1的字符长度

(2)判断方法
① 空值(NULL)
select Store_Name from location where Store_Name IS NULL;
#查询location表中Store_Name字段为空值的记录select Store_Name from location where Store_Name IS NOT NULL;
#查询location表中Store_Name字段中非空值的记录

② 无值(' ') 
select Store_Name from location where Store_Name = '';
#查询location表中Store_Name字段为无值的记录select Store_Name from location where Store_Name <> '';
select Store_Name from location where Store_Name !='';
#查询location表中Store_Name字段中非无值的记录

(3)count()统计

会忽略空值行,统计时不计算在内

select count(*) from location;
#统计location表中所有值的个数select count(Store_Name) from location;
#统计location表中Store_Name字段值的个数

(三)正则表达式

1.语法

select查询中的where查询可以匹配正则表达式

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 ‘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 次

2.示例

select * from store_info where Store_Name regexp 'os';
#查询store_info表中Store_Name字段中包含os的记录
select * from store_info where Store_Name regexp '^[A-G]';
#查询store_info表中Store_Name字段中除了包含A-G的记录
select * from store_info where Store_Name regexp 'Ho|Bo';
#查询store_info表中Store_Name字段中包含Ho或者Bo的记录

二、存储过程

(一)定义

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

(二)使用过程

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

(三)优点

1.执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率

2.SQL语句加上控制语句的集合,灵活性高

3.在服务器端存储,客户端调用时,降低网络负载

4.可多次重复被调用,可随时修改,不影响客户端调用

5.可完成所有的数据库操作,也可控制数据库的信息访问权限

(四)创建存储过程

1.修改SQL语句结束符

delimiter $$							
#将语句的结束符号从分号;临时改为两个$$(可以是自定义)

2.创建存储过程

use 库名$$
#切换库     
create procedure 存储过程名()
#创建存储过程,过程名为Proc,不带参数       
-> begin  
#过程体以关键字 begin 开始
-> SQL语句序列; 
#过程体语句 
-> end$$
#过程体以关键字 end 结束

3.把结束符改回分号

delimiter ;
#将语句的结束符号恢复为分号

4.调用存储过程

call 存储过程名;
#调用存储过程

5.示例

delimiter $$
#将语句的结束符号从分号;临时改为两个$$							       
create procedure Proc()	
#创建存储过程,过程名为Proc,不带参数				                
-> begin	
#过程体以关键字 begin 开始							
-> select * from store_info;
#显示store_info表的表内容			                        
-> end $$	
#过程体以关键字 end 结束							
delimiter ;
#将语句的结束符号恢复为分号
call Proc;
#调用存储过程

(五)查看存储过程

1.语法

show create procedure [数据库.]存储过程名;		
#查看某个存储过程的具体信息

2.示例

show create procedure Proc;
#查看Proc存储过程
show procedure status [like '%Proc%'] \G
#查看存储过程的状态以竖列显示

(六)存储过程的参数

1.in 输入参数

表示调用者向过程传入值(传入值可以是字面量或变量)

(1)语法
create procedure Proc1(in 传入参数名 参数数据类型);
(2)示例
delimiter $$				
create procedure Proc1(in inname char(16))	
#创建存储过程Proc1,添加传入参数inname 参数数据类型char(16)	
-> begin					
-> select * from store_info where Store_Name = inname;
#查看store_info表中新添加的传入参数
-> end $$					
delimiter ;					call Proc1('Boston');
#调用存储过程

2.out 输出参数

表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

(1)语法
create procedure Proc1(out 传出参数名 参数数据类型);
(2)示例
delimiter $$
CREATE PROCEDURE proc3(in in_Sales INT,OUT out_name varchar(20))
BEGIN
SELECT Store_Name INTO out_name FROM store_info where Sales<in_Sales;
END$$
delimiter ;
CALL proc3(400,@dest);
SELECT @dest;
#当输入参数大于Sales字段的值时,显示Store_Name字段##select 字段或聚合函数 into +输出参数名称 from 表名 where 条件
##输出参数的值一般是一个确定的值,多个会报错

3.inout输入输出参数

既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

(1)语法
create procedure Proc1(inout 传入传出参数名 参数数据类型);
(2)示例
delimiter $$
CREATE PROCEDURE proc4(INOUT i INT)
BEGIN
SELECT COUNT(Store_Name) INTO i FROM store_info where Sales>i;
END$$
delimiter ;
set @a=400;
CALL proc4(@a);
SELECT @a;
#统计Sales字段的值大于400的个数

(七)删除存储过程

1.语法

drop procedure if exists Proc;		
#仅当存在时删除,不添加 if exists 时,如果指定的过程不存在,则产生一个错误

2.示例

drop procedure if exists Proc2;		
#删除Proc2存储过程

(八)存储过程的控制语句

1. if 条件语句

(1)语法
if 条件表达式 thenSQL语句序列1
else SQL语句序列2
end if;
(2)示例
① 准备一个表

② 创建
delimiter $$  
create procedure proc2(in pro int) 
#创建 proc2存储过程,并添加传入参数pro ,参数类型为int
-> begin 
-> declare var int;  
-> set var=pro*2; #设置变量名  
-> if var>=500 then #if条件判断,当var>=500时,则
-> update store_info set Sales=Sales+100; #Sales字段的值+100
-> else #否则就执行下一条命令
-> update store_info set Sales=Sales-100;  #Sales字段的值-100
-> end if;  
-> end $$delimiter ;call Proc2(6);

③查看结果

2. while 循环语句

(1)语法
while 条件表达式
doSQL语句序列;set 条件迭代;
end while;
(2)示例
DELIMITER $$  
CREATE PROCEDURE proc5()
begin 
declare var int(10);  
set var=1;
create table t5(id int primary key auto_increment,name varchar(20));  
while var<6 do  
insert into t5(name) values(concat('student',var)); 
set var=var+1;  
end while;  
end $$  
#循环插入6条数据,student后缀从0开始
DELIMITER ;
CALL proc5;
select * from t5;

三、实操一次性往数据库中插入上万条数据

(一)存储过程实现上万数据插入

create procedure proc7 ()
begin
declare i int;
set i = 1;
create table test03 (id int primary key auto_increment, name varchar(20));
while i <= 1000000;
do insert into test03 (name) values (concat('student', i));
set i = i + 1;
end while;
end $$delimiter ;
call proc7;
select count(*) from test03;

(二)shell脚本实现上万数据插入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/591968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos 7.9 升级系统默认的python2.7到python 2.7.18

centos 7.9 升级系统默认的python2.7到python 2.7.18 备份旧版本 mv /usr/bin/python /usr/bin/python_2.7.5 下载新版本 Download Python | Python.org Python Release Python 2.7.18 | Python.org wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz cd /…

哨兵1号回波数据(L0级)FDBAQ压缩算法详解

本专栏目录: 全球SAR卫星大盘点与回波数据处理专栏目录-CSDN博客 1. 全球SAR卫星回波数据压缩算法统计 各国的SAR卫星的压缩算法按照时间轴排列如下: 可以看出传统的分块BAQ压缩算法(上图粉色)仍然是主流,哨兵1号其实也有传统的BAQ压缩模式。 本文介绍哨兵1号用的FDBAQ算…

【数据分析】指数移动平均线的直观解释

slavahead 一、介绍 在时间序列分析中&#xff0c;通常需要通过考虑先前的值来了解序列的趋势方向。序列中下一个值的近似可以通过多种方式执行&#xff0c;包括使用简单基线或构建高级机器学习模型。 指数&#xff08;加权&#xff09;移动平均线是这两种方法之间的稳健权衡。…

nginx源码分析-4

这一章内容讲述nginx的模块化。 ngx_module_t&#xff1a;一个结构体&#xff0c;用于描述nginx中的各个模块&#xff0c;其中包括核心模块、HTTP模块、事件模块等。这个结构体包含了一些模块的关键信息和回调函数&#xff0c;以便nginx在运行时能够正确地加载和管理这些模块。…

UE5.1_Gameplay Debugger启用

UE5.1_Gameplay Debugger启用 重点问题&#xff1a; Gamplay Debugger启用不知道&#xff1f; Apostrophe、Tilde键不知道是哪个&#xff1f; Gameplay调试程序 | 虚幻引擎文档 (unrealengine.com) Gameplay Debugger

day02 有序数组的平方 长度最小子数组 螺旋矩阵

题目1&#xff1a;977 有序数组的平方 题目链接&#xff1a;977 有序数组的平方 题意 返回非递减整数数组的每个数字的平方和 也按照递减排序 双指针★ 代码 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {vector<int>…

VMware 虚拟机 ubuntu 20.04 硬盘扩容方法

前言 最近由于需要编译 【RK3568】的 Linux SDK&#xff0c;发现 虚拟机默认的 200G 空间不足了&#xff0c;因此想增加这个 200G 空间的限制&#xff0c;通过网络上查找了一些方法&#xff0c;加上自己亲自验证&#xff0c;确认 硬盘扩容 正常&#xff0c;方法也比较的容易&a…

Vue:Vue与VueComponent的关系图

1.一个重要的内置关系&#xff1a;VueComponent.prototype.proto Vue.prototype 2.为什么要有这个关系&#xff1a;让组件实例对象&#xff08;vc&#xff09;可以访问到 Vue原型上的属性、方法。 案例证明&#xff1a; <!DOCTYPE html> <html lang"en"&…

Java日期和时间(二)

新增的日期和时间 为什么要学习新增的日期和时间 1、代替Calendar LocalDate&#xff1a;年、月、日 LocalTime&#xff1a;时、分、秒 LocalDateTime&#xff1a;年、月、日、时、分、秒 ZoneId&#xff1a;时区 ZoneldDatetime&#xff1a;带时区的时间 2、代替Date Instan…

解决npm,pnpm,yarn等安装electron超时等问题

我在安装electron的时候&#xff0c;出现了超时等等各种问题&#xff1a; &#xff08;RequestError: connect ETIMEDOUT 20.205.243.166:443&#xff09; npm yarn&#xff1a;Request Error: connect ETIMEDOUT 20.205.243.166:443 RequestError: socket hang up npm ER…

【排序】堆排序(C语言实现)

文章目录 前言1. 堆排序1.1 堆排序的思想1.2 堆排序的实现 2. 为什么向下调整而不是向上调整 前言 本章主要会讲堆排序的实现过程以及向上调整和向下调整的时间复杂度&#xff0c;在学习本章前&#xff0c;需要对堆、以及向上调整和向下调整有一个了解&#xff0c;如果不了解的…

vite+Vue3学习笔记(3)——界面设计

1 Element-plus 这是一个基于Vue3的组件库&#xff0c;能够快速构建界面样式。 官网链接&#xff1a; https://element-plus.gitee.io/zh-CN/guide/design.html 1.1 基础组件 1.1.1 安装 项目中的终端输入&#xff1a; npm install --save element-plus 1.1.2 引用 1.1.2.1…

图论及其应用(匈牙利算法)---期末胡乱复习版

目录 题目知识点解题步骤小结题目 T1:从下图中给定的 M = {x1y4,x2y2,x3y1,x4y5},用 Hungariam算法【匈牙利算法】 求出图中的完美匹配,并写出步骤。 知识点 关于匈牙利算法: 需要注意的是,匈牙利算法仅适用于二分图,并且能够找到完美匹配。什么是交替路?从一个未匹…

BDD - Python Behave Retry 机制

BDD - Python Behave Retry 机制 引言Behave RetryBehave Retry 应用feature 文件创建 step 文件Retry运行 Behave 并生成 rerun 文件重新运行失败的场景 引言 在日常运行测试用例&#xff0c;有时因为环境不稳定造成一些测试用例跑失败了&#xff0c;如果能将这些失败的测试用…

计算字符串的长度几种方法 | 递归 | 指针减指针 | 计数器 | C语言 | 详解 | 期末考试必看!!!

一&#xff0c;使用 递归 计算 字符串 的 长度 1&#xff0c;题目描述 2&#xff0c;分析题目 Ⅰ&#xff0c;题目中要求除了函数的形参&#xff0c;函数中不能够使用多余的变量&#xff08;这是比较苛刻的要求&#xff09;。 Ⅱ&#xff0c;根据此&#xff0c;很自然的…

k3s-安装、卸载、证书过期x509

k3s-安装、卸载、证书过期 K3S 是轻量级的 Kubernetes。易于安装&#xff0c;仅需要 Kubernetes 内存的一半&#xff0c;所有组件都在一个小于 100 MB 的二进制文件中。 环境准备 # 配置yum源 yum install -y yum-utils yum-config-manager --add-repo http://mirrors.aliyu…

回归预测 | MATLAB实OOA-LSTM基于鱼鹰优化算法优化长短期记忆网络的多输入单输出数据回归预测模型 (多指标,多图)

回归预测 | MATLAB实OOA-LSTM基于鱼鹰优化算法优化长短期记忆网络的多输入单输出数据回归预测模型 &#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实OOA-LSTM基于鱼鹰优化算法优化长短期记忆网络的多输入单输出数据回归预测模型 &#xff08;多指标&a…

20231228在Firefly的AIO-3399J开发板的Android11的挖掘机的DTS配置单前置摄像头ov13850

20231228在Firefly的AIO-3399J开发板的Android11的挖掘机的DTS配置单前置摄像头ov13850 2023/12/28 10:42 【碰到一个很神奇的问题】&#xff1a; 昨天晚上前置摄像头怎么也点不亮&#xff01;改了巨多的地方&#xff01;晚上睡觉之前把开发板彻底断电了&#xff01;今天开电脑…

STM32的在线升级(IAP)实现方法:BOOT+APP原理详解

0 工具准备 Keil uVision5 Cortex M3权威指南&#xff08;中文&#xff09; STM32参考手册 1 在线升级&#xff08;IAP&#xff09;设计思路 为了实现STM32的在线升级&#xff08;IAP&#xff09;功能&#xff0c;通常会将STM32的FLASH划分为BOOT和APP两个部分&#xff0c;BOO…

虚幻UE 光源-色温和光度学

文章目录 一、色温二、光度学1、lux勒克斯2、cd坎德拉3、nit尼特4、总结 三、EV曝光值 一、色温 色温可以简单的认为就是颜色的温度。 但他是有范围的&#xff0c;也是有要求的&#xff0c;并不是所有的颜色都可以有色温。 以上就是色温范围图。 而这些颜色的温度是怎么定义…