当前位置: 首页 > 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); 第四…...

向爬虫而生---Redis 基石篇2 <拓展Hash>

前言: 延续上一篇向爬虫而生---Redis 基石篇 &#xff1c;拓展str&#xff1e;-CSDN博客 这个章节拓展一下hash的玩法,主要是要挖一挖 ,啥时候用它最合适;让他并不是一无是处.. 正文: 哈希&#xff08;Hash&#xff09;数据结构是Redis中的一种常用的数据类型。它是一个键值…...

【论文精读】A Survey on Large Language Model based Autonomous Agents

A Survey on Large Language Model based Autonomous Agents 前言Abstract1 Introduction2 LLM-based Autonomous Agent Construction2.1 Agent Architecture Design2.1.1 Profiling Module2.1.2 Memory ModuleMemory StructuresMemory FormatsMemory Operations 2.1.3 Plannin…...

23款奔驰GLC260L升级原厂540全景影像 高清环绕的视野

嗨 今天给大家介绍一台奔驰GLC260L升级原厂360全景影像 新款GLC升级原厂360全景影像 也只需要安装前面 左右三个摄像头 后面的那个还是正常用的&#xff0c;不过不一样的是 升级完成之后会有多了个功能 那就是新款透明底盘&#xff0c;星骏汇小许Xjh15863 左右两边只需要更换后…...

SQL 在已有表中修改列名的方法

文章目录 1. MySQL2. SQL Server3. Oracle / PostgreSQL Question&#xff1a; 假设有一张表 StudentInfo&#xff0c;表中有一个列名是 Student_Name &#xff0c;想要把这个列名改成 StudentName 应该如何操作&#xff1f; 建表语句如下&#xff1a; --建表 if object_id(S…...

QT----Visual stdio翻金币案例,附源码

历经一个月&#xff0c;各种事情磕磕绊绊&#xff0c;终于结束了&#xff0c;自己还是太菜了 案例的文档写的教程已经很详细&#xff0c;这边主要是记录一些问题 github代码 gitee代码 1、图片无法加载 一开始加载首页图片和标题出不来&#xff0c;结果是paintEvent重写的字打…...

总结:浏览器解析html与执行JS之生命周期详解

总结&#xff1a;浏览器解析html与执行JS之生命周期详解 一浏览器解析html的生命周期&#xff1a;1.请求HTML文档&#xff1a;2接收响应&#xff1a;3构建DOM树&#xff1a;4加载外部资源&#xff1a;5DOMContentLoaded事件&#xff1a;6样式计算与布局&#xff1a;7绘制与渲染…...

aspose通过开始和结束位置关键词截取word另存为新文件

关键词匹配实体类&#xff1a; Data EqualsAndHashCode(callSuper false) public class TextConfig implements Serializable {private static final long serialVersionUID 1L;/*** 开始关键词&#xff0c;多个逗号分隔*/private String textStart ;/*** 结束关键词&#x…...

深入解析美颜SDK:绿幕抠图功能的算法原理

当下&#xff0c;美颜SDK绿幕抠图功能成为许多应用中不可或缺的一环。本文将深入解析美颜SDK中绿幕抠图功能的算法原理&#xff0c;揭示其背后的技术奥秘。 一、什么是美颜SDK绿幕抠图&#xff1f; 美颜SDK的绿幕抠图功能是一种通过计算机视觉技术&#xff0c;将视频或图像中…...

从有向带权图判断最短路径里各目标顶点顺序

对如下有向带权图&#xff0c;若采用迪杰斯特拉(Dijkstra)算法求从源点a到其他各顶点的最短路径&#xff0c;则得到的第一路径的目标顶点是b&#xff0c;第二条最短路径的目标顶点是c&#xff0c;后续得到的其余各最短路径的目标顶点依次是() A.d,e,f B.e,d,f C.f,d,e D.f,…...

鼠标驱动框架:模拟键盘按键

/* 参考: drivers\hid\usbhid\usbmouse.c */ #include <linux/kernel.h> #include <linux/slab.h> #include <linux/module.h> #include <linux/init.h> #include <linux/usb.h> #include <linux/input.h> #include <linux/hid.h>st…...

网站建设的整体流程/杭州网络优化公司排名

更多干货 分布式实战&#xff08;干货&#xff09;spring cloud 实战&#xff08;干货&#xff09;mybatis 实战&#xff08;干货&#xff09;spring boot 实战&#xff08;干货&#xff09;React 入门实战&#xff08;干货&#xff09;构建中小型互联网企业架构&#xff08;干…...

沧州网站设计哪家好/做营销策划的公司

1.什么是HttpClient Http 是Hyper-Text Transfer Protocol简写&#xff0c;迄今为止互联网应用最广泛的协议。网络服务、互联网应用、网络计算需求的增长&#xff0c;持续推动http协议应用范围不断扩展。 java.net包提供http方式访问资源的最基本功能&#xff0c;httpClient在其…...

创建网站建设/免费网站推广网站在线

面对这种问题&#xff0c;大家应该都有这样的疑惑&#xff0c;我全部都是byte类型的数据&#xff0c;而且两个相加也并没超过byte类型的表示范围&#xff0c;但是为什么会报错Type mismatch: cannot convert from int to byte&#xff1f; 接下来为大家解惑&#xff1a; n,m,…...

个人网站建设方案书 备案/百度邮箱注册入口

安装配置可参考 https://blog.csdn.net/weixin_43205308/article/details/130020674 1、如果启动过derby&#xff0c;最小初始化过 在安装路径下删除 derby.log metastore_db rm -rf derby.log metastore_db此处省略安装mysql数据库 2、配置MySQL 登录mysql mysql -uroot …...

wordpress 做网站/上海网络营销上海网络推广

ACPI包括很多功能&#xff0c;电源管理是其功能之一&#xff0c;具体的ACPI的介绍可以参考ACPI的技术文档。Linux中利用模块机制&#xff0c;实现ACPI对电源的管理&#xff1a;static struct cpufreq_driver acpi_cpufreq_driver {.verify acpi_cpufreq_verify,.target acpi_c…...

北京网站建设 招聘信息/360优化大师官网

Python酷的文章一般在 https://pythonlibrary.net/网页上首发&#xff0c;而随后同步的我们的微信&#xff0c;然后由于我们的文章都是包含大量代码的干货文章&#xff0c;对于微信阅读其实效果并不是特别理想&#xff0c;因此我们后来将微信公众号的方向转为为订阅用户提供文章…...