当前位置: 首页 > news >正文

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脚本实现上万数据插入

相关文章:

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

目录 一、高级SQL语句 &#xff08;一&#xff09;case语句 1.语法定义 2.示例 &#xff08;二&#xff09;空值(NULL) 和 无值( ) 1.区别 2.示例 &#xff08;1&#xff09;字符长度 &#xff08;2&#xff09;判断方法 ① 空值(NULL) ② 无值( ) &#xff08;3…...

使用idea构建父子类springboot项目教程

第一步创建一个父类java项目&#xff08;最外层java项目&#xff09; 1.点击File 然后点击new 再点击Project 2.点击Maven 配置Java版本 再点击next 3.GroupId&#xff1a;包结构&#xff0c;ArtifactId&#xff1a;项目名称&#xff0c;填写完&#xff0c;点击next 4.点击…...

TCP_可靠数据传输原理

引言 在网络通信中&#xff0c;TCP是确保数据可靠传输的关键协议。但在我们深入研究TCP拥塞控制技术之前&#xff0c;让我们先探索可靠数据传输的原理&#xff0c;特别是TCP头部中一些重要字段的作用。 网络层提供了点对点的通信服务&#xff0c;努力交付数据报&#xff0c;但…...

Python随机点名

python随机点名 # 生成 0 ~ 9 之间的随机数 # 导入 random(随机数) 模块 import random print(random.randint(0,9)) 执行以上代码输出结果为: 4 尝试一下 以上实例我们使用了 random 模块的 randint() 函数来生成随机数&#xff0c;你每次执行后都返回不同的数字&a…...

HarmonyOS4.0系统性深入开发07创建一个ArkTS卡片

创建一个ArkTS卡片 在已有的应用工程中&#xff0c;创建ArkTS卡片&#xff0c;具体操作方式如下。 创建卡片。 根据实际业务场景&#xff0c;选择一个卡片模板。 在选择卡片的开发语言类型&#xff08;Language&#xff09;时&#xff0c;选择ArkTS选项&#xff0c;然后单…...

胡润研究院发布《2023胡润中国最具历史文化底蕴品牌榜》

胡润研究院发布《2023胡润中国最具历史文化底蕴品牌榜》&#xff0c;前十名分别是片仔癀、同仁堂、贵州茅台、五粮液、中国银行、中华、黄山、农业银行、建设银行、汾酒。 榜单调研范围涵盖中国内地具有60年以上历史的为消费者提供产品或服务的品牌&#xff0c;综合考察品牌历史…...

MFC编程技巧与范例详解01

目录 1、MFC概述 &#xff08;1&#xff09;、MFC为什么不用C语言使用C &#xff08;2&#xff09;、MFC的开发模型文档-视图模型 &#xff08;3&#xff09;、一个完善的MFC程序应该包括 &#xff08;4&#xff09;、MFC常用的类 2、MFC的特性 &#xff08;1&#xff09…...

TPS5430正负电源模块

TPS5430正负电源模块 Chapter1 TPS5430正负电源模块一、芯片重要参数二、tps5430参考电路讲解以及PCB布局1.正压降压&#xff08;15V转12V&#xff09;2.正压降负压&#xff08;15V转-12V&#xff09; Chapter2 使用tps5430制作正负DC-DC降压电源&#xff0c;tps7a47和tps7a33制…...

【LeetCode 面试经典150题】45. Jump Game II 跳跃游戏II

45. Jump Game II 题目大意 You are given a 0-indexed array of integers nums of length n. You are initially positioned at nums[0]. Each element nums[i] represents the maximum length of a forward jump from index i. In other words, if you are at nums[i], yo…...

RustDesk连接客户端提示key不匹配 Key Mismatch无法连接(已解决)

环境: RustDesk1.1.9 服务端docker部署 问题描述: RustDesk连接客户端提示key不匹配 Key Mismatch无法连接 解决方案: 1.docker部署RustDesk服务检查配置 networks:rustdesk-net:external: falsevolumes:hbbr:hbbs:services:hbbs:container_name: rustdesk-hbbsport…...

puppeteer入门指南

一、简介 Puppeteer 是一个 Node 库&#xff0c;它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。 二、使用 1、安装nodejs最新版 2、安装puppeteer-core npm install puppeteer-core 3、编写main.js const puppeteer require(puppeteer-core);(as…...

vue3按钮点击频率控制

现有一个按钮&#xff0c;如下图 点击时 再次点击 刷新窗口再次点击 刷新窗口依然可以实现点击频率控制。 代码实现&#xff1a; <template><!--<el-config-provider :locale"locale"><router-view/></el-config-provider>--><el…...

(一)Matlab数值计算基础

目录 1.2Matlab中的数据类型 1.2Matlab中的数据类型 逻辑型 逻辑型变量值为1或0字符型 MATLAB的字符型输入使用单引号括起来&#xff0c;字符串存储为字符数组&#xff0c;每个元素占一个ASCII字符数值型 数值型分为整型&#xff08;int&#xff09;、单精度浮点型&#xff0…...

《MySQL系列-InnoDB引擎02》InnoDB存储引擎介绍

文章目录 第二章 InnoDB存储引擎1 InnoDB存储引擎概述2 InnoDB存储引擎的版本3 InnoDB体系架构3.1 后台线程3.2 内存 4 Checkpoint技术5 Master Thread 工作方式5.1 InnoDB 1.0.x版本之前的Master Thread5.2 InnoDB 1.2.x版本之前的Master Thread5.3 InnoDB 1.2.x版本的Master …...

单片机大小端模式

单片机大小端模式 参考链接 单片机干货-什么是大小端_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ju4y1M7Tx/?spm_id_from333.337.search-card.all.click&vd_sourcee821a225c7ba4a7b85e5aa6d013ac92e 特此记录 anlog 2024年1月2日...

Codeforces Good Bye 2023 A~E

A.2023(思维) 题意&#xff1a; 有一个序列 A a 1 , a 2 , . . . , a n k A a_1, a_2, ..., a_{n k} Aa1​,a2​,...,ank​&#xff0c;且这个序列满足 ∏ i 1 n k a i 2023 \prod\limits_{i 1}^{n k}a_i 2023 i1∏nk​ai​2023&#xff0c;而这个序列中的 k k k个…...

【蓝桥杯】比赛大纲整理

枚举[1-3] 排序 &#xff08;1&#xff09;冒泡排序[2] &#xff08;2&#xff09;选择排序[3] &#xff08;3&#xff09;插入排序[3] 搜索(bfs, dfs)[1-5] 贪心[1-5] 模拟[1-3] 二分[2-5] DP(普通一维问题)[3-5] 高精度[1-5] 数据结构 &#xff08;1&#xff09;栈[2-4]&…...

探索 CodeWave低代码技术的魅力与应用

目录 前言1 低代码平台2 CodeWave简介3 CodeWave 的独特之处3.1 高保真还原交互视觉需求3.2 擅长复杂应用开发3.3 支持应用导出&独立部署3.4 金融级安全要求3.5 可集成性高3.6 可拓展性强 4 平台架构和核心功能4.1 数据模型设计4.2 页面设计4.3 逻辑设计4.4 流程设计4.5 接…...

《2023我的编程之旅》

一、背景 自从踏入编程的世界&#xff0c;我就像乘坐了一辆无法停下的列车&#xff0c;穿行在数据的丛林中&#xff0c;寻找解决问题的答案。编程不仅是我的职业&#xff0c;更是我表达自我、解决问题的工具。在这篇文章中&#xff0c;我将分享一段令人印象深刻的实战经历&…...

C++ 二进制图片的读取和blob插入mysql_stmt_init—新年第一课

关于二进制图片的读取和BLOB插入一共包含五步 第一步&#xff1a;初始化 MYSQL_STMT* stmt mysql_stmt_init(&mysql); 第二步&#xff1a;预处理sql语句 mysql_stmt_prepare(stmt,sql,sqllen); 第三步&#xff1a;绑定字段 mysql_stmt_bind_param(stmt,bind); 第四…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...