day03 子查询分页存储过程

目录

子查询

介绍:

子查询规范

子查询分类

模糊查询

注意事项和技巧

分页查询

作用:

LIMIT关键字使用

指定初始位置

不指定初始位置

分页

视图

介绍:

优点

创建视图

嵌套视图

删除视图

修改视图

更新视图

存储过程

介绍:

优点

缺点

创建存储过程

删除存储过程

无参存储过程

带参数的存储过程

带输入输出参数

局部和全局变量

分支语句

while循环

Q&A


子查询

介绍:

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入

子查询规范
  1. 子查询必须放在小括号中,并给子查询起别名

  2. 子查询一般放在比较操作符的右边,以增强代码可读性

  3. 子查询可以出现在几乎所有的SELECT子句中(如:SELECT、FROM、WHERE、ORDER BY、HAVING子句

子查询分类
  1. 标量子查询(scalar subquery):返回1行1列一个值

    • 查询出基本工资比ALLEN低的全部员工信息

    SELECT * FROM emp WHERE sal<(SELECT sal FROM emp WHERE eanme='ALLEN');
  2. 行子查询(row subquery):返回的结果集是 1 行 N 列

    • 查询与SCOTT从事同一工作且工资相同的员工信息

    SELECT e.* FROM emp e WHERE (e.job,e.sal)=(SELECT job,sal FROM emp WHERE ename='SCOTT')
    AND e.ename<>'SCOTT';
  3. 列子查询(column subquery):返回的结果集是 N 行 1列

    • 在使用多行子查询需要使用多行比较操作符:

  4. 表子查询(table subquery):返回的结果集是 N 行 N 列

模糊查询

在 MySQL 中,LIKE 关键字主要用于搜索匹配字段中的指定内容。

语法格式:

[NOT] LIKE '字符串'
  • NOT :可选参数,字段中的内容与指定的字符串不匹配时满足条件。

  • 字符串:指定用来匹配的字符串。“字符串”可以是一个很完整的字符串,也可以包含通配符。

LIKE 关键字支持百分号%和下划线“_”通配符。

  • %代表任何长度

  • _代表单个字符

  • \转义字符

注意事项和技巧
  • 注意大小写。MySQL 默认是不区分大小写的。如果区分大小写,像“Tom”这样的数据就不能被“t%”所匹配到。

  • 注意尾部空格,尾部空格会干扰通配符的匹配。例如,“T% ”就不能匹配到“Tom”。(可以使用trim去除前后空格)

  • 注意 NULL。“%”通配符可以到匹配任意字符,但是不能匹配 NULL。也就是说 “%”匹配不到表中值为 NULL 的记录。

分页查询

作用:
  • 限制查询结果返回的条数,减小对数据库服务器造成的压力

LIMIT关键字使用
指定初始位置

LIMIT 关键字可以指定查询结果从哪条记录开始显示,显示多少条记录。

LIMIT 初始位置,记录数
不指定初始位置

LIMIT 关键字不指定初始位置时,记录从第一条记录开始显示。显示记录的条数由 LIMIT 关键字指定。

LIMIT 记录数
分页
#对12条数据进行分页=>每页数量3条
# limit (当前页-1)*每页数量,每页数量
select * from g_customer limit 0,3;#1-3
select * from g_customer limit 3,3;#1-3
select * from g_customer limit 6,3;#1-3
select * from g_customer limit 9,3;#1-3

视图

介绍:
  • 视图是在数据库中定义的虚拟表。它是一个基于一个或多个实际表的查询结果集,可以像实际表一样被查询和操作。

  • 视图可以看作是一个动态生成的数据表,其内容是从其他表中选择、过滤和计算得到的。

  • 视图通过使用SQL查询语句来定义,这些查询语句可以包括与一个或多个表的连接、条件过滤、列计算、聚合函数等操作。

优点
  • 数据的抽象和简化:将复杂的查询逻辑和多表连接操作封装为一个简化的视图查询,提供了更简洁、更易于理解的数据模型。

  • 数据安全性:通过给用户授予对视图的访问权限,可以隐藏底层表的结构和敏感数据,只允许用户在特定条件下查看和操作数据。

  • 提高查询性能:视图可以预先计算和存储查询结果,而不需要重新执行复杂的查询操作。

  • 简化应用开发:通过将复杂的查询逻辑封装为视图,只需要简单地查询视图,而无需关心视图背后的复杂查询逻辑和表结构。

创建视图
create view empInfo as
select empno,ename,deptno from emp;
select * from  empInfo;
嵌套视图
-- 查询每个员工所属的部门名称
create view empDetail as
select e.EMPNO,e.ENAME,d.DNAME from emp e,dept d where e.DEPTNO=d.DEPTNO;
-- empDetail表:存储员工部门名称
​
create view empDetail2 as
select empno,dname from empDetail;
select * from empDetail2;
删除视图
drop view 视图名;
修改视图
-- ALTER VIEW 视图名 AS  sql语句;
alter view empDetail as
select e.EMPNO,d.DNAME from emp e,dept d where e.DEPTNO=d.DEPTNO;
更新视图

更新视图会影响原表的数据

要创建可更新视图,定义视图的select语句不能包含以下任何元素:

  • 聚合函数,如:MIN,MAX,SUM,AVG,COUNT等。

  • DISTINCT子句

  • GROUP BY子句

  • HAVING子句

  • UNION或UNION ALL子句

  • 左连接或外连接。

create view stuInfo3 as
select * from student
​
update  stuInfo3 set score=90.5 where id=8#修改视图数据
​
insert into stuInfo3 values(16,"h",'男',100,'',3)#往视图插入数据

存储过程

介绍:
  • 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

  • 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

  • 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

优点
  • 存储过程可封装,并隐藏复杂的逻辑。

  • 存储过程可以回传值,并可以接受参数。

  • 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。

  • 存储过程可以用在数据检验。

缺点
  • 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。

  • 存储过程的性能调校与撰写,受限于各种数据库系统。

创建存储过程
create procedure 存储过程名()
begin
-- sql
end;
删除存储过程
drop procedure 存储过程名;
无参存储过程
create PROCEDURE slectByEmpNo()
begin
#sql语句:当前存储过程的功能
select * from emp where empno=7369;
end;
#调用存储过程: call 存储过程名称();
call slectByEmpNo();
带参数的存储过程
create procedure selectByDeptNo(IN deptname varchar(20))
begin
select * from emp where DEPTNO in(select DEPTNO from dept where DNAME=deptname);
end;
call selectByDeptNo('SALES');
带输入输出参数
create procedure avgSal(in deptname varchar(20),out sal_ double)
begin 
select  avg(sal) sal into sal_ from emp where deptno in(select DEPTNO from dept where DNAME=deptname)  group by DEPTNO  ;
end;
​
call avgSal('abc',@sal_);
select @sal_;
select * from emp where DEPTNO in(select DEPTNO from dept where DNAME='abc') and sal>(select @sal_);
局部和全局变量

使用declare定义的是局部变量,每次调用存储过程都会重置值

  • declare a int ;#定义一个局部变量a 类型为int

使用set定义的是全局变量,每次调用存储过程都会改变变量值

  • set @b=1;

分支语句
IF 条件1 THEN
    -- sql;
ELSEIF 条件2 THEN
    -- sql;
ELSE
   -- sql;
END IF;
-- 根据员工编号查找工资,如果员工工资低于3000,则加5000,如果低于4000,则加2000,否则加1000,返回最终结果
create PROCEDURE addSal(
in empno_ int,
out mySal double
)
begin
DECLARE sal_ double;
select sal into sal_ from emp where empno=empno_;
if sal_<3000  then
  select sal+5000 into mySal from emp where empno=empno_;
elseif  sal_<4000 then
      select sal+2000 into mySal from emp where empno=empno_;
else 
      select sal+1000 into mySal from emp where empno=empno_;       
 end if;   
end;
​
call addSal(7369,@mySal);
select @mySal;
while循环
while i<=n do
if i%2=0 then
set gender='男';
else 
set gender='女';
end if;
insert into student(stu_id,name,age,gender) values(i,concat("tom",i),20,gender);
set i=i+1;
end while;

Q&A

题1 mysql子查询常用用法

  1. 标量子查询(scalar subquery):返回1行1列一个值

    • 查询出基本工资比ALLEN低的全部员工信息

    SELECT * FROM emp WHERE sal<(SELECT sal FROM emp WHERE eanme='ALLEN');
  2. 行子查询(row subquery):返回的结果集是 1 行 N 列

    • 查询与SCOTT从事同一工作且工资相同的员工信息

    SELECT e.* FROM emp e WHERE (e.job,e.sal)=(SELECT job,sal FROM emp WHERE ename='SCOTT')
    AND e.ename<>'SCOTT';
  3. 列子查询(column subquery):返回的结果集是 N 行 1列

    • 在使用多行子查询需要使用多行比较操作符:

  4. 表子查询(table subquery):返回的结果集是 N 行 N 列

题2 模糊查询常用通配符及含义

  • %代表任何长度

  • _代表单个字符

  • \转义字符

题3 什么是视图及创建格式

视图是在数据库中定义的虚拟表。它是一个基于一个或多个实际表的查询结果集,可以像实际表一样被查询和操作。

创建视图

create view empInfo as
select empno,ename,deptno from emp;
select * from  empInfo;

题4 更新视图需要注意哪些地方

  1. 更新视图会影响原表的数据

  2. 要创建可更新视图,定义视图的select语句不能包含以下任何元素:

    • 聚合函数,如:MIN,MAX,SUM,AVG,COUNT等。

    • DISTINCT子句

    • GROUP BY子句

    • HAVING子句

    • UNION或UNION ALL子句

    • 左连接或外连接。

题5 存储过程定义格式及调用

创建存储过程

create procedure 存储过程名()
begin
-- sql
end;

调用存储过程: call 存储过程名称();

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-结构型-06-桥接模式

1、传统方式解决手机操作问题 现在对不同手机类型的不同品牌实现操作编程&#xff08;比如&#xff1a;开机、关机、上网&#xff0c;打电话等&#xff09;&#xff0c;如图&#xff1a; UML 类图 问题分析 扩展性问题&#xff08;类爆炸&#xff09;&#xff1a;如果我们再…

yt-dlp:强大的跨平台视频下载器

一、引言 在当今数字时代&#xff0c;视频已成为我们获取信息和娱乐的重要途径。然而&#xff0c;由于版权和网络限制&#xff0c;我们常常无法直接在本地保存我们喜爱的视频。幸运的是&#xff0c;有一个名为yt-dlp的命令行程序&#xff0c;它可以帮助我们从YouTube.com和其他…

RK3588/算能/Nvidia智能盒子:加速山西铝业智能化转型,保障矿业皮带传输安全稳定运行

近年来&#xff0c;各类矿山事故频发&#xff0c;暴露出传统矿业各环节的诸多问题。随着全国重点产煤省份相继出台相关政策文件&#xff0c;矿业智能化建设进程加快。皮带传输系统升级是矿业智能化的一个重要环节&#xff0c;同时也是降本增效的一个重点方向。 △各省份智能矿山…

CCAA:认证通用基础(国家质量基础设施(NQI))的相关概念

3.国家质量基础设施NQI&#xff09;的相关概念 一、国家质量基础设施 国家质量基础设施(NQI&#xff0c;NationalQualityInfrastructure):国家建立和执行标准、计量认证认可、检验检测等所需的质量体制框架的统称&#xff0c;包括法规体系、管理体系、技术体系等质量基础设施与…

猫头虎 分享已解决Bug || `Uncaught ReferenceError: x is not defined`✨

猫头虎 分享已解决Bug || Uncaught ReferenceError: x is not defined&#x1f680;✨ 摘要 ✨&#x1f4a1; 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师&#xff0c;同时也是一位科技自媒体博主。今天我要和大家分享一些前端开发过程中常见的Bug以及详细的…

国内能用的ai聊天软件有哪些?这三款还不错

国内能用的ai聊天软件有哪些&#xff1f;在人工智能飞速发展的今天&#xff0c;AI聊天软件已经成为我们日常生活和工作中不可或缺的一部分。它们不仅可以帮助我们快速获取信息&#xff0c;还能提供有趣的对话体验。今天&#xff0c;就为大家推荐三款国内能用的AI聊天软件&#…

分布式事务msb

分布式事务使用场景 添加商品看库存够不够。库存扣减&#xff0c;扣完给订单服务一个响应&#xff0c;如果新加商品出问题了怎么回滚。 分布式事务概念 XA规范 XA规范&#xff1a;总之一句话&#xff1a; 就X/Open DTP 定义的 事务协调者与数据库之间的接口规范&#xff08;即…

港硕上岸鹅厂算法岗,谈谈感受和心得!

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

目标检测—Fast RCNN

介绍Fast R-CNN之前先简单回顾一下R-CNN和SPP-net R-CNN&#xff08;Regions with CNN&#xff09; affine image wraping 解析 Bounding Box Regression&#xff08;边界框回归&#xff09; 如何回归&#xff1f; 问题1&#xff1a;为什么要使用相对坐标差&#xff1f; …

数据库系统概述选择简答概念复习

目录 一、组成数据库的三要素 二、关系数据库特点 三、三级模式、二级映像 四、视图和审计提供的安全性 审计(Auditing) 视图(Views) 五、grant、revoke GRANT REVOKE 六、三种完整性 实体完整性 参照完整性 自定义完整性 七、事务的特性ACDI 原子性(Atomicity)…

A.P.穆勒-马士基将作为银牌赞助商出席2024中国汽车供应链降碳和可持续国际峰会

作为一家综合性集装箱物流公司&#xff0c;A.P.穆勒-马士基致力于连接和简化我们客户的供应链。作为物流服务领域的全球领导者&#xff0c;公司拥有100,000多家客户&#xff0c;业务遍及130多个国家&#xff0c;拥有约80,000名员工。A.P.穆勒-马士基致力于通过新技术、新船舶和…

c++实现二叉搜索树(下)

好久不见啊&#xff0c;baby们&#xff0c;小吉我又回归了&#xff0c;发完这一篇小吉将会有两周时间不会更新blog了&#xff08;sorry&#xff09;&#xff0c;在小吉没有发blog的日子里大家也要好好学习数据结构与算法哦&#xff0c;还有就是别忘了小吉我❤️  这篇博客是二…

MySQL从5.7升级到8.0步骤及其问题

MySQL从5.7升级到8.0步骤及其问题 前言 本文源自微博客&#xff0c;且以获得授权&#xff0c;请尊重版权。 一、需求背景 Docker环境下&#xff0c;MySQL5.7升级到8.0&#xff0c;数据迁移时使用的是mysqldump方式迁移。 二、迁移步骤 数据备份&#xff1a; docker exec -i 1…

pygame游戏开发

Pygame游戏开发 pygame简介 模块库请参考&#xff1a;pygame官方文档 pygame可以用作游戏开发&#xff0c;但在商业游戏中真正的开发工具却不是pygame。使用pygame开发游戏周期长。 安装pygame 在pycharm中安装第三方库pygame&#xff1a; 在计算机中安装pygame&#xf…

AI虚拟数字人上线需要办理哪些资质?

近年来&#xff0c;随着AI 技术快速发展&#xff0c;虚拟数字人行业也进入了新的发展阶段。AI 技术可覆盖虚拟数字人的建模、视频生成、驱动等全流程&#xff0c;一方面使虚拟数字人的制作成本降低、制作周期缩短&#xff0c;另一方面&#xff0c;多模态 AI 技术使得虚拟数字人…

【RK3588/算能/Nvidia智能盒子】AI“值守”,规范新能源汽车充电站停车、烟火及充电乱象

近年来&#xff0c;中国新能源汽车高速发展&#xff0c;产量连续8年位居全球第一。根据中国充电联盟数据&#xff0c;截至2023年6月&#xff0c;新能源汽车保有量1620万辆&#xff0c;全国充电基础设施累计数量为665.2万台&#xff0c;车桩比约2.5:1。 虽然新能源汽车与充电桩供…

短视频矩阵系统:高效运营,解决多账号管理难题

前言 在当下短视频风靡的时代&#xff0c;如何高效管理和运营多个短视频账号&#xff0c;成为了众多运营者面临的挑战。而今&#xff0c;一款全新的短视频矩阵系统应运而生&#xff0c;它不仅融合了AI文案生成与剪辑模式等先进功能&#xff0c;更支持多平台授权&#xff0c;助…

小阿轩yx-Nginx 优化与防盗链

小阿轩yx-Nginx 优化与防盗链 Nginx 服务优化 在企业应用环境中&#xff0c;服务器的安全性和响应速度需要根据实际情况进行相应参数配置&#xff0c;以达到最优的用户体验。 Nginx默认的安装参数 只能提供最基本的服务 需要调整 网页缓存时间连接超时网页压缩等相应参数…

【记录44】【案例】echarts地图

效果&#xff1a;直接上效果图 环境&#xff1a;vue、echarts4.1.0 源码 // 创建容器 <template><div id"center"></div> </template>//设置容器大小&#xff0c;#center { width: 100%; height: 60vh; }这里需注意&#xff1a;笔者在echar…

如何轻松进行照片压缩?5个软件帮助你快速进行照片压缩

如何轻松进行照片压缩&#xff1f;5个软件帮助你快速进行照片压缩 照片压缩是一种常见的图像处理操作&#xff0c;旨在减小图像文件的大小而尽量保持图像质量。有许多软件和工具可供选择&#xff0c;每个工具都有其独特的压缩算法和功能。以下是一些关于照片压缩的详细信息&am…