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  thenselect sal+5000 into mySal from emp where empno=empno_;
elseif  sal_<4000 thenselect 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 存储过程名称();

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

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

相关文章

RT-Thread PIN设备

RT-Thread PIN设备 RT-Thread PIN设备驱动框架RT-Thread PIN设备驱动层次图RT-Thread PIN设备注册RT-Thread PIN设备注册函数 RT-Thread PIN设备操作函数pin_getpin_modepin_writepin_readpin_attach_irqpin_detach_irqpin_irq_enable PIN设备又叫GPIO设备&#xff0c;是MCU输入…

SpringSecurity-入门代码

创建SpringBoot项目 参考文章&#xff1a; 【环境搭建】使用IDEA创建SpringBoot项目详细步骤_idea创建spring boot项目-CSDN博客 编写helloworld代码 RestController public class HelloController {GetMapping("/hello")public String hello(){return "hel…

深入了解SD-WAN:企业广域网的未来

在讨论SD-WAN之前&#xff0c;我们先来了解一下WAN的基本概念。WAN&#xff08;广域网&#xff09;是一个连接多个地理位置分散的局域网的通信网络。在企业中&#xff0c;WAN通常连接总部、分支机构、托管设施和云服务等多个网络节点。广域网允许用户共享各种应用和服务&#x…

【AI绘画】新手小白看这篇就够啦!国产PS AI插件超好入门!

随着人工智能技术的飞速发展&#xff0c;Photoshop作为设计师们不可或缺的工具&#xff0c;也在不断地融入AI技术&#xff0c;以提升设计效率和效果。最近米兔用了一款AI绘画软件StartAI&#xff0c;被其强大的功能和易用性经验到了&#xff0c;下面跟大家详细分享一下这款ps插…

ViNT: A Foundation Model for Visual Navigation

介绍 现存的问题&#xff1a;预训练的方式在很多领域取得了成功&#xff0c;但是由于环境、平台和应用程序的绝对多样性&#xff0c;因此很难应用在机器人领域。 那么想要做移动机器人的基础模型需要什么&#xff1f; 本文定义了一个机器人领域的基础模型&#xff0c;可以实…

文字炫酷祝福 含魔法代码

效果下图&#xff1a;&#xff08;可自定义显示内容&#xff09; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…

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

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

mysql--安装跳过验证修改密码安全加固

安装mysql 配置mysql的yum源 [rootVM-0-14-rockylinux ~]# tee /etc/yum.repos.d/mysql.repo << EOF > [MYSQL] > namemysql > baseurlhttps://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64 > gpgcheck0 > EOF yum安装mysq…

Playwright工作原理

执行test时&#xff0c;有哪些关键步骤 当我们用Playwright编写一段简单的test script&#xff0c;代码如下所示&#xff1a;在test case中第一段代码就是await page.goto(xxxxx) import { test, expect } from playwright/test;test(test, async ({ page }) > {await page…

NVIDIA新模型Nemotron-4:98%的训练数据是合成生成的,你敢信?

获取本文论文原文PDF&#xff0c;请公众号 AI论文解读 留言&#xff1a;论文解读 标题&#xff1a;Nemotron-4 340B Technical Report 模型概述&#xff1a;Nemotron-4 340B系列模型的基本构成 Nemotron-4 340B系列模型包括三个主要版本&#xff1a;Nemotron-4-340B-Base、…

【ARM-Linux篇】POSIX消息队列

System V消息队列POSIX 消息队列主 要 函 数#include <sys/msg.h> int msgget(key_t key, int oflag) int msgsnd(int msqid, const void * ptr, size_t length, int flag) ssize_t msgrcv (int msqid, void *ptr, size_t length, long type, int flag) int msgctl(int m…

算法设计与分析期末复习题

一&#xff1a;程序阅读分析题&#xff08;共40分&#xff09; 1.&#xff08;8分&#xff09;阅读“算法1”&#xff0c;分析算法1的功能、时间复杂度。 答案&#xff1a;经典的汉诺塔问题&#xff0c;其目标是将 n 个不同大小的盘子从柱子 A 移动到柱子 C&#xff0c;借助柱…

停车场控制机系统哪家好?捷顺捷曜分体式车场控制机有哪些功能亮点?

停车场控制机为现代城市提供了许多便利和好处。首先&#xff0c;它能够自动记录车辆进出的时间&#xff0c;便于车主和管理人员进行费用计算。其次&#xff0c;通过车牌识别技术&#xff0c;提高了车辆进出的效率&#xff0c;减少了排队等待时间。此外&#xff0c;控制机还可以…

商讯杂志商讯杂志社商讯编辑部2024年第10期目录

案例分享 基于胜任素质的干部选拔和梯队建设体系探讨——以A区卫生健康系统为例 康文雁; 1-4 “家庭五险一金”对居民商业保险购买存在挤出效应——基于江苏省徐州、淮安、泰州三市的实证研究 李炳毅; 5-8 人口老龄化背景下促进徐州市经济高质量发展的探究 李艳秋;…

Python学习笔记12:进阶篇(二),类的继承与组合

类的继承 我们在编写一系列的类的时候&#xff0c;会发现这些类很相似&#xff0c;但是又有各自的特点和行为。在编写这些类的时候&#xff0c;我们可以把相同的部分抽象成一个基类&#xff0c;然后根据其他不同的特点和行为&#xff0c;抽象出子类&#xff0c;继承这个基类。…

上海AI Lab推出8B模型,奥数成绩媲美GPT-4

只用1/200的参数&#xff0c;就能让大模型拥有和GPT-4一样的数学能力&#xff1f; 复旦大学和上海AI实验室的研究团队刚刚研发出了一款具有超强数学能力的模型。 这款模型名为MCTSr&#xff0c;以Llama 3为基础&#xff0c;参数量只有8B&#xff0c;却在奥赛级别的题目上取得了…

Nuxt快速学习开发 -- Nuxt3配置

Nuxt配置 nuxt.config.ts文件位于 Nuxt 项目的根目录下&#xff0c;可以覆盖或扩展应用程序的行为 使用可组合项&#xff0c;这些变量会暴露给应用程序 //nuxt.config.ts import { fileURLToPath } from "url"; ​ export default defineNuxtConfig({alias: {//配置…

Java线程池基本概念

全局和局部线程池 全局线程池 在Spring框架中&#xff0c;全局线程池如ThreadPoolTaskExecutor通常是作为Spring Bean存在的&#xff0c;它们的生命周期由Spring容器管理。当Spring容器关闭时&#xff0c;这些线程池也会被适当地清理和关闭。因此&#xff0c;开发者通常不需要手…

DDD架构和微服务初步实现

本次记录的是微服务的初步认识和DDD架构的初步实现和思路&#xff0c;在之前的发布里&#xff0c;对Javaweb进行了一次小总结&#xff0c;还有一些东西&#xff0c;不去详细理解说明了&#xff0c;下面开始我对微服务的理解。 什么是微服务&#xff1f; 在刚刚开始学习的时候…

Study--Oracle-03-数据库常规操作

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。 一、oracle 版本及主要功能 二、数据安装完成后常用操作SQL 1、检查数据库监听状态 监听的常用命令 启动&#xff1a;[oracleoracle u01]$ lsnrctl stop 停止&am…