MySQL高阶SQL语句(二)

文章目录

  • MySQL高阶SQL语句(二)
    • 一、MySQL常用查询
      • 1、子查询
        • 1.1 语法
          • 1.1.1 结合select语句查询
          • 1.1.2 结合insert语句查询
          • 1.1.3 结合update语句查询
          • 1.1.4 结合delete语句查询
          • 1.1.5 在in前面添加not
          • 1.1.6 exists关键字
      • 2、别名
    • 二、MySQL视图
      • 1、视图介绍
        • 1.1 视图特点
        • 1.2 作用范围
        • 1.3 功能
      • 2、视图和表的区别和联系
        • 2.1 区别
        • 2.2 联系
      • 3、创建视图
        • 3.1 单表创建
        • 3.2 多表创建视图
        • 3.3 修改表的数据
        • 3.4 删除视图
    • 三、NULL 值
      • null值与空值的区别
    • 四、连接查询
      • 1、内连接
        • 1.1 语法
        • 1.2 内连接查询
      • 2、左连接
        • 左连接查询
      • 3、右连接
        • 右连接查询
      • 4、内连接、左连接、右连接区别
    • 五、存储过程
      • 1、存储过程的介绍
      • 2、存储过程的优点
      • 3、创建存储过程
      • 4、调用存储过程
      • 5、查看存储过程
      • 6、存储过程的参数
      • 7、修改存储过程
      • 8、删除存储过程

MySQL高阶SQL语句(二)

一、MySQL常用查询

1、子查询

  • 子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。
  • 子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一 步的查询过滤。
  • 子语句可以与主语句所查询的表相同,也可以是不同表
  • 子语句中的sql语句是为了最后过滤出一个结果集,用于主语句的判断条件
  • in: 将主表和子表关联/连接的语法
  • 子查询不仅可以在 select 语句中使用,在 insert、update、delete 中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套。
1.1 语法
[表达式] IN [子查询]
  • IN 用来判断某个值是否在给定的结果集中,通常结合子查询来使用
[表达式] [NOT] IN [子查询]
  • 当表达式与子查询返回的结果集中的某个值相等时,返回 true,否则返回 false。 若启用了 NOT 关键字,则返回值相反。需要注意的是,子查询只能返回一列数据,如果需求比较复杂,一列解决不了问题,可以使用多层嵌套的方式来应对。 多数情况下,子查询都是与 select 语句一起使用的
1.1.1 结合select语句查询
use xi;
#切换数据库

show tables;
#查询库中表的信息

create table yy02(id int);
#创建表

insert into yy02 values(1),(2),(3);
#表中插入数据

select * from yy02;
#查询表的信息

select * from ww;
#查询表的信息

select id,name,score from ww where id in (select id from yy02);
#从ww表中选出那些其id值在yy02表的id字段中出现的记录,并显示这些记录的id、name和score字段的值

select id,name,score from xx01 where id in (select name from ww where score > 60);
#where语句指定的字段(id)与子查询中查询的字段(name)不一致,会报错,显示结果为空

select id,name,score from xx01 where name in (select name from ww where score > 60);
#从xx01表和ww表中选出name字段相同的记录,并显示选定id,name,score字段中score大于60的记录

select id,name,score from xx01 where name in (select name from xx01 where score > 60);
#同表也可以查询,但是跟单表查询结果一致
select id,name,score from xx01 where score > 60;

image-20240327144639188

image-20240327144728910

image-20240327144846533

image-20240327145001609

image-20240327145448281

1.1.2 结合insert语句查询
  • 子查询还可以用在 insert 语句中。子查询的结果集可以通过 insert 语句插入到其他的表中
##将xx01表与ww表的相同记录行插入到xx04表中

select * from xx04;
#查询xx04表信息

delete from xx04;
#删除xx04表中数据,保留表结构

insert into xx04 select * from xx01 where id in (select id from ww);
#查询xx01表和ww表中相同的数据,并将数据结果插入到xx04表中

select * from xx04;
#查询xx04表信息

image-20240327150100887

image-20240327150142336

image-20240327150328968

1.1.3 结合update语句查询
  • update 语句也可以使用子查询。update 内的子查询,在 set 更新内容时,可以是单独的一列,也可以是多列
##将xx04表中id=6记录行的score修改为60

update xx04 set score=68 where id in (select id from xx04 where id=6);
#不能对同一个表xx04既查询又修改,会报错

update xx04 set score=68 where id in (select id from ww where id=6);
#查询ww表中id=6的记录行,将xx04表中此记录行的score修改为68

select * from xx04;
#查看修改完后xx04表的信息

image-20240327151445776

1.1.4 结合delete语句查询
  • delete也适用于子查询
##删除xx04表中score小于60的记录行

select * from xx04 where score < 60;
#查询xx04表中score小于60的数据

delete from xx04 where id in (select id from xx04 where score < 60);
#不能对同一个表格既查询又删除,会报错

delete from xx04 where id in (select id from ww where score < 60);
#查询ww表中score小于60的记录行,与xx04表对比,将xx04表中相同的记录行删除

select * from xx04;
#查询xx04biao的信息

image-20240327152551232

1.1.5 在in前面添加not
  • not in与in作用相反,表示否定(即不在子查询的结果集里面)
select * from xx04;
#查询xx04表的信息

delete from xx04 where id not in (select id from ww where score > 50);
#查询ww表中score小于50的记录行,并与xx04表做对比,将xx04表中相同的记录行删除

select * from xx04;
#查询xx04表的信息

image-20240327153347987

1.1.6 exists关键字
  • exists 这个关键字在子查询时,主要用于判断子查询的结果集是否为空。如果不为空, 则返回 true;反之,则返回 false
select sum(score) from xx04 where exists(select id from xx04 where score > 80);
#查询xx04表中score大于80的记录行,并统计score的总和

select sum(score) from xx04 where exists(select id from ww where score > 80);
#查询ww表中score大于80的记录行,与xx04表做比较,并统计相同score的总和

select sum(score) from xx04 where exists(select id from xx04 where score < 50);
#xx04表中没有score小于50分的记录,所以查询结果为null

image-20240327160036967

2、别名

  • 将结果集做为一张表进行查询的时候,我们也需要用到别名
select id,name from(select id,name,score from xx04);
#此处没有设置别名会报错
#原因是:select * from 表名,此为标准格式,而以上的查询语句,"表名"的位置其实是一个完整结果集,mysql并不能直接识别,而此时给与结果集设置一个别名,以”select a.id from a“的方式查询将此结果集视为一张"表",就可以正常查询数据了

select a.id,a.name from(select id,name,score from xx04) a;
#查询xx04表中id,name,score字段,并显示id,name字段,与单表查询结果一致

select id, name from xx04;

image-20240327161744466

二、MySQL视图

1、视图介绍

  • 视图,可以被当作是虚拟表或存储查询
  • 数据库中的虚拟表,这张虚拟表中不包含真实数据,只是做了真实数据的映射(视图可以理解为镜花水月/倒影,动态保存结果集(数据))
1.1 视图特点
  • 视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对净额表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。
1.2 作用范围
select * from 表;
#展示的部分是表

select * from view_name;
#展示的一张或多张表
1.3 功能
  • 简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性

  • 本质而言视图是一种select(结果集的呈现)

  • 视图适合于多表连接浏览时使用,不适合增、删、改,而存储过程适合于使用较频繁的SQL语句,这样可以提高执行效率

2、视图和表的区别和联系

2.1 区别
  • 视图是已经编译好的sql语句,而表不是

  • 视图没有实际的物理记录,而表有

  • 表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能用创建的语句来修改

  • 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构

  • 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表

  • 视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)

2.2 联系
  • 视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。
  • 一个视图可以对应一个基本表,也可以对应多个基本表。
  • 视图是基本表的抽象和在逻辑意义上建立的新关系。

3、创建视图

3.1 单表创建
create view v_score as select * from ww where score >=80;
#创建视图(将ww表中score大于等于80的记录导入v_score视图表中)

select * from v_score;
#查看视图

show table status\G
#查看表状态

desc v_score;
desc ww;
#查看视图与源表结构
#区别就是视图没有主键

image-20240327162615915

image-20240327162528685

image-20240327162424094

3.2 多表创建视图
create table luck(id int,name char(10),age varchar(3));
#创建luck表

insert into luck values(1,'aaaa',26),(2,'bbbb',18),(3,'cccc',24),(4,'liu',20);
#表中插入数据

select * from luck;
#查看luck表的信息

create view v_luck(id,name,score,age) as select ww.id,ww.name,ww.score,luck.age from ww,luck where ww.name=luck.name;
#将ww表与luck表中name字段相同的记录行导入到新的视图v_luck

select * from v_luck;
#查看视图表

image-20240327165136196

3.3 修改表的数据
update ww set score='60' where id=2;
#修改原表ww的数据,将id=2的score修改为60

select * from v_luck;
#查看视图,表中score发生变化,数据改为60,原表变化,视图也发生改变

select * from ww;
#查看原表,score改为60


##同时可以通过视图修改原表
update v_luck set score='78' where id=3;
#修改视图,将id=3的score改为78

select * from ww;
#查看原表ww,修改视图,原表也会发生变化

select * from v_luck;
#查看视图

image-20240327165534418

image-20240327170022622

3.4 删除视图
drop view v_score;
#删除视图

image-20240327170727373

总结

  • 修改表不能修改以函数、复合函数方式计算出来的字段

  • 查询方便、安全性

    • 查询方便:索引速度快、同时可以多表查询更为迅速(视图不保存真实数据,视图本质类似select)
    • 安全性:我们实现登陆的账户是root ——》所拥有权限 ,视图无法显示完整的约束

三、NULL 值

  • 在 SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失 的值,也就是在表中该字段是没有值的。
  • 如果在创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空。
  • 在向表内插入记录或者更新记录时,如果该字段没有 NOT NULL 并且没有值,这时候新记录的该字段将被保存为 NULL。需要注意的是,NULL 值与数字 0 或者空白(spaces)的字段是不同的,值为 NULL 的字段是没有值的。
  • 在 SQL 语句中,使用 IS NULL 可以判断表内的某个字段是不是 NULL 值,相反的用 IS NOT NULL 可以判断不是 NULL 值。

null值与空值的区别

  • 空值长度为0,不占空间,NULL值的长度为null,占用空间
select length(null),length(''),length('abc');

image-20240327171212651

  • 使用 IS NULL 可以判断表内的某个字段是不是 NULL 值,相反的用 IS NOT NULL 可以判断不是 NULL 值
select * from ww where name is null;
#因为name不是空值,所以返回结果为空

select id,name from ww where name is not null;
#返回name结果不是空值

image-20240327171630218

四、连接查询

  • MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择 性的连接到选定的主表结果集上。
  • 使用较多的连接查询包括:内连接、左连接和右连接

创建两个新表

create table zz01(01_id int(11) default null,01_name varchar(32) default null,01_level int(11) default null);
#创建zz01表

insert into zz01 values (1,'aaaa',10),(2,'bbbb',20),(3,'cccc',30),(4,'dddd',40);
#zz01表中插入数据

select * from zz01;
#查询zz01表的信息

create table zz02 (02_id int(11) default null,02_name varchar(32) default null,02_level int(11) default null);
#创建zz02表

insert into zz02 values (3,'cccc',30),(4,'dddd',40),(5,'xxxx',50),(6,'yyyy',60);
#zz02表中插入数据

select * from zz02;
#查询zz02表的信息

image-20240327173042127

1、内连接

  • MySQL中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合。
  • 通常在 FROM 子句中使用关键字 inner join 来连接多张表,并使用 on 字句设置连接条件,内连接是系统默认的表连接,所以在 FROM 子句后可以省略 INNER 关键字,只使用 关键字 JOIN。
  • 同时有多个表时,也可以连续使用 inner join 来实现多表的内连接,不过为了更好的性能,建议最好不要超过三个表

内连查询通过inner join 的方式将两张表指定的相同字段的记录行输出

1.1 语法
SELECT column_name(s)FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
1.2 内连接查询
select * from zz01;
#查询zz01表的信息

select * from zz02;
#查询zz02表的信息

select zz01.01_id,zz01.01_name from zz01 inner join zz02 on zz01.01_name=zz02.02_name;
#内连接查询,显示两个表相同的部分

image-20240327173728268

2、左连接

  • 左连接也可以被称为左外连接,在 FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN 关键字来表示。
  • 左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参 考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。
左连接查询

左连接查询:在左连接的查询结果集中,除了符合匹配规则的行外,还包括左表中有但是右表中不匹配的行,这些记录在右表中以 NULL 补足

select * from zz01;
#查询zz01表的信息

select * from zz02;
#查询zz02表的信息

select *  from zz01 left join zz02 on zz01.01_name=zz02.02_name;
#左连接查询,左边显示左表全部信息,右边显示与左表相同的信息

image-20240327174313274

3、右连接

  • 右连接也被称为右外连接,在 FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 关键字来表示。
  • 右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配
右连接查询

右连接查询:在右连接的查询结果集中,除了符合匹配规则的行外,还包括右表中有但是左表中不匹 配的行,这些记录在左表中以 NULL 补足

select * from zz01;
#查询zz01表的信息

select * from zz02;
#查询zz02表的信息

select *  from zz01 right join zz02 on zz01.01_name=zz02.02_name;
#右连接查询,右边显示右表全部信息,左边显示与右表相同的信息

image-20240327174509547

4、内连接、左连接、右连接区别

  • 内连接:显示两个表相同部分内容
  • 左连接:显示左表全部内容,右表仅显示与左表内容相同的部分,右表记录不足的地方均为 NULL。
  • 右连接:显示右表全部内容,左表仅显示与右表内容相同的部分,左表记录不足的地方均为 NULL。

五、存储过程

1、存储过程的介绍

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

2、存储过程的优点

  • 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率。
  • SQL语句加上控制语句的集合,灵活性高。
  • 在服务器端存储,客户端调用时,降低网络负载。
  • 可多次重复被调用,可随时修改,不影响客户端调用。
  • 可完成所有的数据库操作,也可控制数据库的信息访问权限。

3、创建存储过程

语法

CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
[过程参数[,…] ] 格式
<过程名>:尽量避免与内置的函数或字段重名
<过程体>:语句
[ IN | OUT | INOUT ] <参数名><类型>
mysql> delimiter $$
#将语句的结束符号从分号;临时改为$$(可以是自定义)
mysql> create procedure dd()
#创建存储过程,过程名为dd,不带参数
    -> begin
    #过程体以关键字begin开始
    -> create table loo(id int,name char(10),phone varchar(20));
    #创建表
    -> insert into loo values(1,'qi',1824563),(2,'yi',1746653),(3,'yuan',1994873);
    #插入数据
    -> select * from loo;
    #过程体语句
    -> end $$
    #过程体以关键字end结束
Query OK, 0 rows affected (0.01 sec)

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

image-20240327181533580

4、调用存储过程

call dd;
#调用dd存储过程

image-20240327181702005

5、查看存储过程

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

image-20240327182011640

  • 也可使用procedure查看存储过程
show create procedure dd\G
#查看dd存储过程

show procedure status like '%dd%'\G
#查看dd存储过程信息

image-20240327182408867

6、存储过程的参数

  • IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
  • OUT 输出参数:表示过程向调用者传出值(传出值只能是变量)
  • INOUT 输入输出参数:即表示调用者向过程传入值,也表示过程向调用者传出值
mysql> delimiter $$
mysql> create procedure dd1(in inname char(20))
    -> begin
    -> select * from loo where name=inname;
    -> end $$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;


call dd1('yi');
#调用dd1存储过程,相当于调用dd存储过程中name=yi的数据

image-20240327183632376

7、修改存储过程

语法

ALTER PROCEDURE <过程名>[<特征>... ]
ALTER PROCEDURE dd MODIFIES SQL DATA SQL SECURITY INVOKER;
MODIFIES sQLDATA:表明存储过程是否会修改数据
SQL SECURITY INVOKER:存储过程在执行时使用的权限级别
invoker:当定义为INVOKER时,只要执行者有执行权限,就可以成功执行。

8、删除存储过程

  • 存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。
drop procedure if exists dd1;
#删除存储过程dd1

image-20240327185439129

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

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

相关文章

Python处理文件系统路径库之pathlib使用详解

概要 Python的pathlib库提供了一种面向对象的方法来处理文件系统路径。它使得路径操作更加直观和易于管理,相比于传统的os.path模块,pathlib提供了更为丰富和灵活的API。 pathlib库 pathlib模块在Python中用于处理文件系统路径。通过使用面向对象的方法,它允许路径表示为P…

《科学技术创新》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答&#xff1a; 问&#xff1a;《科学技术创新》期刊是哪个级别&#xff1f; 答&#xff1a;省级 主管单位&#xff1a;黑龙江省科学技术协会 主办单位&#xff1a;黑龙江省科普事业中心 问&#xff1a;《科学技术创新》期刊影响因子&#xff1f; 答&#xff1a;(2…

机器学习——聚类算法-层次聚类算法

机器学习——聚类算法-层次聚类算法 在机器学习中&#xff0c;聚类是一种将数据集划分为具有相似特征的组或簇的无监督学习方法。聚类算法有许多种&#xff0c;其中一种常用的算法是层次聚类算法。本文将介绍聚类问题、层次聚类算法的原理、算法流程以及用Python实现层次聚类算…

深入理解Vue的生命周期机制

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

文件删除了怎么恢复?10 个最好的免费文件恢复工具

意外删除、格式化问题和系统故障是数字时代数据丢失的常见原因。在这些情况下&#xff0c;免费的文件恢复软件可以通过廉价地恢复丢失的数据来挽救局面。了解这些程序如何快速有效地恢复任何原因的文件。 为什么您需要免费的文件恢复软件&#xff1a; 如今&#xff0c;任何人都…

【教程】JavaScript代码混淆及优化

摘要 本文将介绍常见的JavaScript代码混淆技术&#xff0c;包括字符串转十六进制、Unicode编码、Base64加密、数值加密、数组混淆、花指令、逗号表达式、控制流程平坦化和eval执行。通过对这些混淆技术的理解和应用&#xff0c;可以提高代码的安全性和保护知识产权。 引言 随…

hutool-captcha 图片偏红问题

hutool-captcha 图片偏红问题 如图 设置代码背景色如下 // 设置背景颜色为白色 不生效 lineCaptcha.setBackground(Color.white);问题代码 //返回 base64 ByteArrayOutputStream bos new ByteArrayOutputStream(); ImageIO.write(lineCaptcha.getImage(), "JPEG"…

47 vue 常见的几种模型视图不同步的问题

前言 这里主要是来看一下 关于 vue 中的一些场景下面 可能会出现 模型和视图 不同步更新的情况 然后 这种情况主要是 vue 中的对象 属性没有响应式的 setter, getter 然后 我们这里就来看一下 大多数的情况下的一个场景, 和一些处理方式 当然 处理方式主要是基于 Vue.set, …

【C++】Binary Search Tree

这篇博客要说的是二叉搜索树&#xff0c;又叫二叉排序树&#xff0c;它或者是一颗空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;那么左子树上所有节点的值都小于根节点的值&#xff0c;不会出现等于的情况 若它的右子树不为空&#…

数据结构——快速排序的三种方法和非递归实现快速排序

数据结构——快速排序的三种方法和非递归实现快速排序&#xff08;升序&#xff09; 快速排序的单趟排序hoare法挖坑法前后指针法 快速排序的实现key基准值的选取快速排序代码快速排序的优化 快速排序&#xff08;非递归&#xff09; 快速排序的单趟排序 hoare法 思路:从给定…

C++第十三弹---内存管理(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、operator new与operator delete函数 1.1、operator new与operator delete函数 2、new和delete的实现原理 2.1、内置类型 2.2、自定义类型 …

基于模糊控制算法的倒立摆控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 对倒立摆模型进行模糊控制器simulink建模&#xff0c;利用倒立摆的摆角角度与小车的位置来控制小车的推力&#xff0c;控制了倒立摆的摆角问题&#xff0c;使得小车最终停在稳…

Redis面试题-缓存雪崩、缓存穿透、缓存击穿问题

1 穿透: 两边都不存在&#xff08;皇帝的新装&#xff09; &#xff08;黑名单&#xff09; &#xff08;布隆过滤器&#xff09; 2 击穿&#xff1a;一个热点的key失效了&#xff0c;这时大量的并发请求直接到达数据库. &#xff08;提前预热&#xff09; 3 雪崩&#xff1a…

LeetCode 27 移除元素

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

【Emgu CV教程】10.9、轮廓的纵横比、面积比、坚硬性、等效直径、方向、掩码及像素点、最值点和它的位置、平均颜色、极值点

文章目录 一、轮廓的纵横比(Aspect Ratio)二、轮廓的面积比(Extent)三、轮廓的坚硬性(Solidity)四、轮廓的等效直径(Equivalent Diameter)五、轮廓的方向(Orientation)六、轮廓的掩码以及像素点(Mask and Pixel Points)1.原始素材2.代码3.运行结果 七、轮廓的值点和它的位置八、…

Spring实战:采用Spring配置文件管理Bean

文章目录 一、Spring框架概述二、实战&#xff1a;采用Spring配置文件管理Bean&#xff08;一&#xff09;创建Jakarta EE项目&#xff08;二&#xff09;添加Spring依赖&#xff08;三&#xff09;创建杀龙任务类&#xff08;四&#xff09;创建勇敢骑士类&#xff08;五&…

基于springboot实现校园周边美食探索及分享平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现园周边美食探索及分享平台系统演示 摘要 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域&#xff0c;传统的…

uni-app(使用阿里图标)

1.注册阿里矢量图标库 注册阿里图标库账号并登录&#xff0c;https://www.iconfont.cn/ 2.加入购物车 搜索适合自己的图标&#xff0c;加入购物车&#xff0c;如下图&#xff1a; 3.加入项目 我的->资源管理->我的项目->创建项目&#xff0c;然后返回购物车&#…

SpringCloud学习笔记二:服务间调用

微服务中&#xff0c;很多服务系统都在独立的进程中运行&#xff0c;通过各个服务系统之间的协作来实现一个大项目的所有业务功能。服务系统间 使用多种跨进程的方式进行通信协作&#xff0c;而RESTful风格的网络请求是最为常见的交互方式之一。 spring cloud提供的方式&#…

工厂数字化看板是什么?部署工厂数字化看板有什么作用?

随着工业4.0时代的来临&#xff0c;数字化转型已成为制造业发展的必然趋势。在这个背景下&#xff0c;工厂数字化看板作为一种高效的信息展示与管理工具&#xff0c;正逐渐受到越来越多企业的青睐。那么&#xff0c;什么是工厂数字化看板&#xff1f;部署工厂数字化看板又有哪些…