MySQL数据库——多表操作

news2024/11/17 5:24:27

在这里插入图片描述

文章目录

  • 前言
  • 多表关系
    • 一对一关系
    • 一对多/多对一关系
    • 多对多关系
  • 外键约束
    • 创建外键约束
    • 插入数据
    • 删除带有外键约束的表的数据
    • 删除外键约束
  • 多表联合查询
    • 数据准备
    • 交叉连接查询
    • 内连接查询
    • 外连接查询
      • 左外连接查询
      • 右外连接查询
      • 满外连接查询
    • 子查询
      • 子查询关键字
        • ALL 关键字
        • ANY 和 SOME 关键字
        • IN 关键字
        • EXISTS 关键字
    • 自关联查询

前言

在日常的数据库使用过程中,我们处理的数据不只是单张表,而是需要我们同时处理多个表的数据,那么今天我将为大家分享关于MySQL的多表操作。

多表关系

在学习多表操作之前,我们需要知道有哪些多表关系:一对一关系、一对多关系/多对一关系、多对多关系。

一对一关系

一对一关系是指一个表的一条记录只能对应另外一个表的一条记录,它们之间通过共同的主键或唯一键进行关联。

在这里插入图片描述

一对多/多对一关系

多表一对多或多对一关系是指一个表的一条记录可以对应另一个表的多条记录,它们之间通过共同的主键或外键进行关联。
在这里插入图片描述

多对多关系

多表多对多关系是指两个或多个表之间相互关联,并且每个表的记录可以对应其他表的多个记录。处理多表多对多关系的常见方法是使用中间表(关联表)来连接关系。

在这里插入图片描述

外键约束

MySQL外键约束是一种数据库约束,用于确保表之间的关系的完整性。它定义了一个字段或一组字段在一个表中的值必须与另一个表中的值保持一致,或满足特定条件。

外键约束通过指定一个外键关系,将一个表的字段(称为外键)与另一个表的主键或唯一键(称为参照键)进行关联。这样,如果某个表中的外键值发生改变,MySQL会自动检查参照表中是否存在匹配的键值,以保持数据的一致性。

外键约束有以下几个作用:

  1. 强制引用完整性:外键约束确保表中的数据在引用时存在于关联表中。
  2. 维护数据一致性:外键约束防止在关联表中删除或修改数据时,引发不一致的结果。
  3. 提供查询优化:MySQL优化器可以使用外键关系来加速查询操作。
  4. 级联操作:外键约束可以定义级联操作,当参照表中的数据更新或删除时,自动对关联表中的数据进行相应操作。

MySQL外键约束具有以下特点:

  1. 强制引用完整性:外键约束确保引用表中的数据在被引用表中存在,防止出现无效的引用。这可以保证数据的一致性和完整性。

  2. 自动验证和维护关系:MySQL会自动验证和维护外键约束,确保关联的数据被正确更新、插入或删除。如果违反了外键约束,MySQL会报错并拒绝执行操作。

  3. 支持级联操作:外键约束可以定义级联操作,在参照表中进行删除或更新操作时,自动对关联表中相关的数据进行相应操作。例如,可以实现级联删除,删除参照表中的数据时,同时删除关联表中的相关数据。

  4. 优化查询性能:MySQL优化器可以使用外键约束来优化查询操作。通过正确设置外键关系,MySQL可以更有效地执行JOIN操作,提高查询性能。

  5. 可以禁用和启用:需要时,可以禁用或启用外键约束,以允许执行某些需要暂时违反外键约束的操作。这个特性在某些情况下很有用,但需要谨慎使用,以防止数据不一致。

  6. 对数据完整性的依赖:使用外键约束可以在数据库级别维护数据完整性,而不是依赖于应用程序。这样可以减少错误和数据不一致的可能性,使数据库更加可靠。

创建外键约束

MySQL 创建外键约束有两种方式:1.在创建表的时候创建外键约束:create table 表名(列名1 类型,列名2 类型,constraint 外键名 foreign key(列名) references 主表(主表列名); 2.在创建表之后创建外键约束:alter table 表名 add constraint 外键名 foreign key(列名) referrnces 主表(主表列名);

我们在创建表之后添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。

在创建表的时候创建外键约束

create table class(class_id int primary key,name varchar(10)); -- 主表
insert into class values(1,'高三1班'), 
						(2,'高三2班'),
						(3,'高三3班');
												
create table student
			(class_id int,student_id int,name varchar(20),gender varchar(10),
			constraint student_fk foreign key(class_id) 
			references class(class_id));

在这里插入图片描述

创建表之后添加外键约束

create table class(class_id int primary key,name varchar(10)); -- 主表
insert into class values(1,'高三1班'), 
						(2,'高三2班'),
						(3,'高三3班');

create table student
	(class_id int,student_id int,name varchar(20),gender varchar(10));
	
alter table student 
add constraint student_fk 
foreign key(class_id) references class(class_id);

在这里插入图片描述

插入数据

当我们插入数据的时候,如果我们先向主表中插入数据的时候,不需要注意什么,但是当我们向从表中插入数据的时候我们需要注意:插入的记录的外键列的数据在主表的主键列中是否存在,如果存在,则插入成功,否则就插入失败。所以建议:插入数据的时候先向主表中插入数据,然后再向从表中插入数据。

insert into student values(1,2301,'张三','男');

在这里插入图片描述

insert into student values(4,2302,'王五','男');

在这里插入图片描述

如果我们在新建外键约束的时候,表中已经存在了数据该怎么办?

create table student
	(class_id int,student_id int,name varchar(20),gender varchar(10));
	
insert into student values(1,2301,'张三','男'),
						(3,2302,'王五','男');
-- 我们插入的数据都是与主键列中的数据相对应
	
alter table student 
add constraint student_fk 
foreign key(class_id) references class(class_id);

在这里插入图片描述
上面存在的数据外键列与主键列中的数据是相对应的,所以插入成功。

create table student
	(class_id int,student_id int,name varchar(20),gender varchar(10));
	
insert into student values(1,2301,'张三','男'),
						(4,2302,'王五','男');
-- 这里class_id 4 在主键列中并不存在,我们看看是否能
alter table student 
add constraint student_fk 
foreign key(class_id) references class(class_id);

在这里插入图片描述
这里class_id 4 在主键列中并不存在,所以插入失败。

删除带有外键约束的表的数据

如果我们需要删除带有外键约束的表中的数据该怎么办呢?

  • 删除从表中的数据可以随便删除
  • 当我们删除主表中的数据时,我们需要注意:我们删除的记录的主键列还被外键列所依赖时,不能删除。

在这里插入图片描述
在这里插入图片描述
此时主键列 1 还被外键列依赖着,我们删除试试。

delete from class where class_id = 1;

在这里插入图片描述
删除失败,所以我们删除主表的数据时,需要考虑该记录的主键列是否还被外键列依赖着。在删除数据的时候建议先删除从表中的数据,然后再删除主表中未被依赖的数据

删除外键约束

但我们不需要外键约束的时候,我们也可以删除外键约束。alter table 表名 drop foreign key 外键名;

在这里插入图片描述
此时外键约束已删除。

多表联合查询

多表查询是 MySQL 操作中最重要也是使用最多的操作,所以我们需要学好 MySQL 多表查询操作。

MySQL多表查询是指在一个查询语句中涉及到多个表,通过指定表之间的连接条件(关联条件)来获取联合数据的过程。多表查询可以用来检索、过滤和组合来自多个表的数据。

MySQL多表操作主要包括:

  • 交叉连接查询
  • 内连接查询
    • 隐式内连接(SQL92标准)
    • 显式内连接(SQL99标准)
  • 外连接
    • 左外连接
    • 右外连接
    • 满外连接
  • 子查询
  • 自关联查询

并且我们实行的是查询操作,外键约束不会对多表查询造成影响。

数据准备

我们为后面的多表查询准备数据。

use mydb3;
-- 创建部门表
create table if not exists dept3(
  deptno varchar(20) primary key ,  -- 部门号
  name varchar(20) -- 部门名字
);

-- 创建员工表
create table if not exists emp3(
  eid varchar(20) primary key , -- 员工编号
  ename varchar(20), -- 员工名字
  age int,  -- 员工年龄
  dept_id varchar(20)  -- 员工所属部门
);

-- 给dept3表添加数据
insert into dept3 values('1001','研发部');
insert into dept3 values('1002','销售部');
insert into dept3 values('1003','财务部');
insert into dept3 values('1004','人事部');

-- 给emp3表添加数据
insert into emp3 values('1','乔峰',20, '1001');
insert into emp3 values('2','段誉',21, '1001');
insert into emp3 values('3','虚竹',23, '1001');
insert into emp3 values('4','阿紫',18, '1001');
insert into emp3 values('5','扫地僧',85, '1002');
insert into emp3 values('6','李秋水',33, '1002');
insert into emp3 values('7','鸠摩智',50, '1002'); 
insert into emp3 values('8','天山童姥',60, '1003');
insert into emp3 values('9','慕容博',58, '1003');
insert into emp3 values('10','丁春秋',71, '1005');

在这里插入图片描述
在这里插入图片描述

交叉连接查询

MySQL交叉连接查询(Cross
Join)是一种用于从两个或多个表中返回所有可能的组合的查询方式。它会返回左边表的每一行与右边表的每一行的所有组合,并且不使用任何连接条件。因此,交叉连接查询会产生一个结果集,其行数等于左边表的行数乘以右边表的行数

select * from 表1,表2
在这里插入图片描述
交叉连接查询实际上就是多个表之间进行 笛卡尔积

在这里插入图片描述
两个分别有m和n条记录的表进行笛卡尔积之后会出现 m*n 条记录。

select * from dept3,emp3;

在这里插入图片描述
但是我们看到笛卡尔积之后的表的数据会发现有很多不适合的记录,所以我们还需要对笛卡尔积生成的表做出筛选。

内连接查询

MySQL内连接查询(Inner Join)是一种用于从两个或多个表中返回满足连接条件的记录集的查询方式。内连接基于指定的连接条件,将两个表中的行进行匹配,并返回匹配的行。

内连接是最常用的连接类型,它可以帮助我们在多个表之间建立关联关系,并获取相关的数据。内连接的结果集只包含匹配的行,因此可以根据连接条件进行数据的关联和过滤,提供更具体和有意义的结果。

隐式内连接:select * from 表A,表B where 条件;
显式内连接:select * from 表A inner join B on 条件; inner 可省略。

MySQL还支持两张以上的表进行多表操作:select * from 表A join B on 条件 join C on 条件...;

在这里插入图片描述
在这里插入图片描述

隐式内连接

select * from dept3,emp3 where dept3.deptno = emp3.dept_id;
-- 如果两张表的列相同,可使用 表名.列名 来区分

在这里插入图片描述
显式内连接

select * from dept3 inner join emp3 on dept3.deptno = emp3.dept_id;

在这里插入图片描述

外连接查询

MySQL外连接(Outer
Join)是一种用于从两个或多个表中返回满足连接条件以及一些或全部不满足连接条件的记录的查询方式。外连接可以帮助我们获取主表和连接表之间的关系,并包含未匹配的行。

外连接查询分为:

  • 左外连接查询
  • 右外连接查询
  • 满外连接查询

左外连接查询

MySQL左外连接查询(Left Outer
Join)是一种通过从左边表(主表)返回所有行以及满足连接条件的右边表(连接表)的匹配行,来获取表之间关联数据的查询方式。左外连接会保留左边表中的所有行,即使在右边表中没有匹配的行。

左外连接会将左边表的每一行与右边表的匹配行进行连接,并返回匹配的结果集。如果右边表中没有匹配的行,则返回NULL值。

select * from 表A left outer join 表B on 条件;
在这里插入图片描述

select * from dept3 left outer join emp3 on dept3.deptno = emp3.dept_id;

在这里插入图片描述

这里因为人事部没有员工,但因为是左外连接,要显示左表中的所有数据,所以人事部中的数据就用 NULL 填充。

右外连接查询

MySQL右外连接查询(Right Outer Join)是一种通过从右边表(连接表)返回所有行以及满足连接条件的左边表(主表)的匹配行,来获取表之间关联数据的查询方式。右外连接会保留右边表中的所有行,即使在左边表中没有匹配的行。

右外连接会将右边表的每一行与左边表的匹配行进行连接,并返回匹配的结果集。如果左边表中没有匹配的行,则返回NULL值。

select * from 表A right outer join 表B on 条件;

在这里插入图片描述

select * from dept3 right outer join emp3 on dept3.deptno = emp3.dept_id;

在这里插入图片描述
1005 没有对应的部门,所以使用 NULL 填充。

左外连接可以根据两个表互换位置来实现相互之间的转换。

select * from emp3 left outer join dept3 on dept3.deptno = emp3.dept_id;

满外连接查询

满外连接是一种同时返回左边表和右边表中的所有行,以及满足连接条件的匹配行的查询方式。它能够获取左右两个表的全部数据并关联它们。

满外连接实际上就是将右外连接的数据拼接到左外连接数据的下面或者是将左外连接的数据拼接到右外连接数据的下面。

但是MySQL不支持满外连接 full outer join ,我们可以用 union 来实现满外连接 。并且 union 满外连接还有两种方式:左外连接 union 右外连接; 去重满外连接 ,左外连接 union all 右外连接; 不去重满外连接。

在这里插入图片描述
在这里插入图片描述

去重满外连接

select * from dept3 left outer join emp3 on dept3.deptno = emp3.dept_id
union
select * from dept3 right outer join emp3 on dept3.deptno = emp3.dept_id;

在这里插入图片描述
不去重满外连接

select * from dept3 left outer join emp3 on dept3.deptno = emp3.dept_id
union all
select * from dept3 right outer join emp3 on dept3.deptno = emp3.dept_id;

在这里插入图片描述

子查询

MySQL子查询(Subquery)是指在一个SQL查询中嵌套另一个完整的SQL查询。子查询可以像普通的查询一样包含SELECT、FROM、WHERE等子句,并且可以返回一个结果集,这个结果集可以在外部查询中直接使用。

子查询通常用于将复杂的查询分解为更小的、可管理的查询块,并通过嵌套来达到更灵活和精确的查询目的。它可以嵌套在SELECT、FROM、WHERE等子句中,用于过滤、排序、计算和联合数据。

子查询可以返回的数据类型分为四种:

  1. 单列单行:返回的是一个具体列的内容,可以理解为一个单值数据。
  2. 单行多列:返回一行数据中多个列的内容
  3. 多行多列:返回多行记录之中同一列的内容,相当于给出了一个操作范围。
  4. 多行多列:查询返回的结果是一张临时表。

如果我们需要知道某个部分有哪些人,我们是不是需要先知道这个部门所代表的部门编号,因为员工信息表中存储的是部门编号,知道了部门编号之后我们才能找出有哪些人。

-- 查询销售部有哪些人
select deptno from dept3 where name = '销售部';

在这里插入图片描述
当我们知道了部门编号之后我们再在员工表中找出部门编号为1002的人的信息。

select ename from emp3 where dept_id = 1002;

在这里插入图片描述
因为 select deptno from dept3 where name = '销售部'; 的结果为1002,所以我们可以直接把这个查询嵌套进 select ename from emp3 where dept_id = 1002; 中,也就是 select ename from emp3 where dept_id = (select deptno from dept3 where name = '销售部');

select ename from emp3 
where dept_id = (select deptno from dept3 where name = '销售部'); -- 返回单行单列

在这里插入图片描述

查询研发部和销售部人的信息。

select eid,ename from emp3 
where dept_id 
in (select deptno from dept3 where name in ('研发部','销售部'));

在这里插入图片描述

-- 查询研发部30岁以下的员工信息,包括员工号,员工名字,部门名字
select eid,ename,name from (select * from emp3 where age < 30) t1
join (select * from dept3 where name = '研发部') t2
on t1.dept_id = t2.deptno;

因为最终要求显示员工号、员工名字、部门名字,这些数据分别在两个表中,所以我们需要将两个表联合起来,并且需要对每张表中的数据做出判断。

在这里插入图片描述

子查询关键字

在子查询中有一些常用的逻辑关键字:

  • ALL 关键字
  • ANY 关键字
  • SOME 关键字
  • IN 关键字
  • EXISTS 关键字

ALL 关键字

在MySQL中,关键字ALL可以用于子查询中,用于比较子查询返回的结果与外部查询条件进行比较。

关键字ALL与子查询配合使用时,表示外部查询条件必须与子查询返回的所有值进行比较,只有当外部查询条件大于或小于子查询中的所有值时,才被视为满足条件。

select ... from ... where c > all(查询语句);

-- 查询员工表中年龄大于1003部门所有员工的年龄的信息
select * from emp3 where age > all(select age from emp3 where dept_id = 1003);

在这里插入图片描述

-- 查询不属于任何部门的员工的信息
select * from emp3 where dept_id != all(select deptno from dept3);

在这里插入图片描述

ANY 和 SOME 关键字

在MySQL中,ANY和SOME关键字可以与子查询一起使用,用于比较外部查询条件与子查询返回的结果集中的任意一个值进行比较。

这两个关键字的作用是类似的,它们都表示外部查询条件只需与子查询返回的结果集中的任意一个值相匹配即可判断为满足条件。

select ... from ... where c > any/some(查询语句);

-- 查询年龄大于1003部门任何一个员工的员工信息
select * from emp3 where age > any(select age from emp3 where dept_id = 1003);

在这里插入图片描述

IN 关键字

IN关键字用于检查外部查询条件是否与子查询结果集中的任意一个值相匹配。如果外部查询条件与子查询结果集中的某个值匹配,则被视为满足条件。

select ... from ... where c in(查询语句);

-- 查询部门为研发部和销售部的员工的信息
select * from emp3 
where dept_id 
in (select deptno from dept3 where name = '研发部' or name = '销售部');

在这里插入图片描述

EXISTS 关键字

EXISTS关键字用于判断子查询是否有结果,如果存在结果,则被视为满足条件,会执行前面的查询语句,如果子查询没有结果,则被视为不满足条件,不执行前面的查询。

select ... from ... where exists(查询语句);

假设我们要查询年龄大于60岁的员工的信息。

-- 查询年龄大于60岁的员工信息
select * from emp3 where exists (select * from emp3 where age > 60);

在这里插入图片描述
会发现,这里将所有员工的信息都显示出来了,这是为什么呢?因为在 EXISTS 后面的子查询中,查找的对象是emp3 的整个表,所以每次的查询都有结果,所以emp3中的所有信息都打印了,那么我们应该怎么办呢?

我们可以形象的将MySQL的查询过程看作是一条记录一条记录的筛选,所以我们可以使用表别名,然后用表别名来判断每一条记录的员工的年龄是否大于60。

-- 查询年龄大于60岁的员工信息
select * from emp3 t where exists (select * from emp3 where t.age > 60);

在这里插入图片描述

使用exists的情况大多也可使用in,但是我们推荐使用exists,因为MySQL底层exists做了优化,查询效率更高。

自关联查询

MySQL自关联查询是指在查询中使用同一个表进行连接操作,创建一个虚拟的关联。在自关联查询中,可以将表视为两个或多个不同的表,并在查询中引用它们。

自关联查询通常涉及到在查询中使用表的别名,以便可以引用同一个表的不同实例。这样可以通过列与自身的比较来建立关联关系。

自关联查询在处理具有层级结构、关系链等的数据时非常有用,常见的应用场景包括获取管理层级关系、查找相关的记录、获取亲属关系等。

MySQL自查询必须得使用别名,否则就会出现错误

我们准备一些自关联用到的数据。

create table t_sanguo(
	eid int primary key,
	ename varchar(20),
	manager_id int,
	foreign key (manager_id) references t_sanguo (eid));
	
	insert into t_sanguo values(1,'刘协',NULL),
								(2,'刘备',1),
								(3,'关羽',2),
								(4,'张飞',2),
								(5,'曹操',1),
								(6,'许褚',5),
								(7,'典韦',1),
								(8,'孙权',1),
								(9,'周瑜',8),
								(10,'鲁肃',8);

我们需要显示出每个人对应的上级信息。

select t1.ename,t2.ename manager 
from t_sanguo t1 join t_sanguo t2 
on t1.manager_id = t2.eid; 

在这里插入图片描述
我们还应该显示出刘协的上级信息,所以我们使用左外连接。

select t1.ename,t2.ename manager 
from t_sanguo t1 left join t_sanguo t2 
on t1.manager_id = t2.eid; 

在这里插入图片描述

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

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

相关文章

2023年华数杯数学建模A题思路代码分析 - 隔热材料的结构优化控制研究

# 1 赛题 A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性&#xff0c;在航天、军工、石化、建筑、交通等 高科技领域中有着广泛的应用。 目前&#xff0c;由单根隔热材料 A 纤维编织成的织物&#xff0c;其热导率可以直接测出&#xff1b;但是 单根隔热…

详解Spring Bean的生命周期

详解Spring Bean的生命周期 Spring Bean的生命周期包括以下阶段&#xff1a; 1. 实例化Bean 对于BeanFactory容器&#xff0c;当客户向容器请求一个尚未初始化的bean时&#xff0c;或初始化bean的时候需要注入另一个尚未初始化的依赖时&#xff0c;容器就会调用createBean进…

剑指Offer 05.替换空格

剑指Offer 05.替换空格 目录 剑指Offer 05.替换空格05.替换空格题目代码&#xff08;容易想到的&#xff09;利用库函数的方法题解&#xff08;时间复杂度更低&#xff09;面试&#xff1a;为什么java中String类型是不可变的 05.替换空格 题目 官网题目地址 代码&#xff08;…

【Python小笔记】零碎同步

1.多字段连接&#xff0c;连接字段名不一致–left_on\right_on对应列示后可匹配 import pandas as pd df_A1pd.read_excel(E:\Mercy\data\mytest\A.xlsx,sheet_name0) df_A2pd.read_excel(E:\Mercy\data\mytest\A.xlsx,sheet_name1)df_Adf_A1.merge(rightdf_A2,howleft,left_o…

P1775 石子合并(弱化版)(内附封面)

石子合并&#xff08;弱化版&#xff09; 题目描述 设有 N ( N ≤ 300 ) N(N \le 300) N(N≤300) 堆石子排成一排&#xff0c;其编号为 1 , 2 , 3 , ⋯ , N 1,2,3,\cdots,N 1,2,3,⋯,N。每堆石子有一定的质量 m i ( m i ≤ 1000 ) m_i\ (m_i \le 1000) mi​ (mi​≤1000)。…

信号执行流程

信号执行是一种用户态与内核态和来回切换&#xff0c;进程不会一接收到信号&#xff0c;就立刻执行&#xff0c;而是在合适的时候执行信号&#xff0c;&#xff08;手头有重要的事情等等再说。 一般来说都是在从内核态返回用户态的时候检测是否有可执行的信号&#xff08;可执…

超详细|ChatGPT辅助论文降重教程100%降至13%

本文讲述使用ChatGPT对论文进行辅助降重&#xff0c;鼓励大家解放大脑&#xff0c;多思考核心论点 祝看到本教程的小伙伴们都完成论文&#xff0c;顺利毕业。 可以加QQ群交流&#xff0c;一群&#xff1a; 123589938 第一章 ChatGPT指令 1.1 同义词替换 对比分析&#xff0c;…

【MySQL】删除重复数据,先进先删

系列文章 C#底层库–MySQLBuilder脚本构建类&#xff08;select、insert、update、in、带条件的SQL自动生成&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类&#xff08;推荐阅读&#xff0…

C语言之结构体篇(简)

结构体 结构体的认知结构体的声明一般声明特殊声明匿名结构体类型 结构体自引用结构体变量的定义与初始化结构体变量的定义结构体变量的初始化 结构体传参结构体内存对齐位段位段声明位段的内存分配位段跨平台问题: 结构体是由我们自己创造的一种类型&#xff0c;使得C语言有能…

kafka权威指南(阅读摘录)

零复制 Kafka 使用零复制技术向客户端发送消息——也就是说&#xff0c;Kafka 直接把消息从文件&#xff08;或者更确切地说是 Linux 文件系统缓存&#xff09;里发送到网络通道&#xff0c;而不需要经过任何中间缓冲区。这是 Kafka 与其他大部分数据库系统不一样的地方&#…

归并排序——“数据结构与算法”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;小雅兰的内容仍然是数据结构与算法专栏的排序呀&#xff0c;下面&#xff0c;让我们进入归并排序的世界吧&#xff01;&#xff01;&#xff01; 归并排序 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种…

[腾讯云 Cloud studio 实战训练营] 制作Scrapy Demo爬取起点网月票榜小说数据

首语 最近接触到了一个关于云开发的IDE&#xff0c;什么意思呢&#xff1f; 就是我们通常开发不是在电脑上吗&#xff0c;既要下载编译器&#xff0c;还要下载合适的编辑器&#xff0c;有的时候甚至还需要配置开发环境&#xff0c;有些繁琐。而这个云开发的IDE就是只需要一台…

“苏豪 x 莱佛士”再度携手,惊艳亮相上海发型师节!

2023年6月28日&#xff0c;以“为爱启航”为主题的第16届AHF亚洲发型师节在上海跨国采购中心盛大开幕。继上次在施华蔻专业2023春夏新季风发布会上&#xff0c;苏豪x莱佛士合作的大秀&#xff0c;赢得了现场观众阵阵掌声。这次“Kraemer苏豪x莱佛士”再度携手&#xff0c;惊艳亮…

PoseiSwap:基于 Nautilus Chain ,构建全新价值体系

在 DeFi Summer 后&#xff0c;以太坊自身的弊端不断凸显&#xff0c;而以 Layer2 的方式为其扩容成为了行业很长一段时间的叙事方向之一。虽然以太坊已经顺利的从 PoW 的 1.0 迈向了 PoS 的 2.0 时代&#xff0c;但以太坊创始人 Vitalik Buterin 表示&#xff0c; Layer2 未来…

MySQL常见问题处理(三)

MySQL 常见问题解决 夕阳留恋的不是黄昏&#xff0c;而是朝阳 上一章简单介绍了MySQL数据库安装(二), 如果没有看过, 请观看上一章 一. root 用户密码忘记&#xff0c;进行重置操作 复制内容来源链接: https://blog.csdn.net/weixin_48927364/article/details/123556927 一.…

【MFC]实现16进制文件浏览器-详细步骤+代码

学习MFC已经两天了&#xff0c;我们来写一个小项目&#xff1a;16进制文件浏览器&#xff0c;简单实现&#xff0c;因为我们MFC学的还不是很透彻&#xff0c;这里会给出详细的每一个步骤&#xff0c;并且详细解释每一个方法&#xff1a; 文章目录 提前了解步骤&#xff1a;基本…

Apache poi 对单元格进行合并

需求背景: 在导出excel时, 需要对内容相同的单元格进行纵向合并 期望达到的效果: poi 实现合并单元格的方法 sheet.addMergedRegion(new CellRangeAddress(开始行, 结束行, 开始列, 结束列)); 个人的实现思路: 1): 举个列子, 就拿截图贴出的 [公司类别] 这一列来进行说明 …

【QT学习】01:helloqt

helloqt OVERVIEW helloqt一、helloqt1.使用向导创建2.手动创建3.pro文件4.Qt应用程序框架 二、按钮创建main.cppmywidget.cpp 三、对象模型1.对象树引入2.存在的问题 一、helloqt 创建一个qt项目&#xff0c;可以使用creator的向导创建&#xff0c;也可自己手动创建&#xff…

企业如何搭建矩阵内容,才能真正实现目的?

当下&#xff0c;新媒体矩阵营销已成为众多企业的营销选择之一&#xff0c;各企业可以通过新媒体矩阵实现扩大品牌声量、维持用户关系、提高销售业绩等不同的目的。 而不同目的的矩阵&#xff0c;它的内容运营模式会稍有差别&#xff0c;评价体系也会大不相同。 企业在运营某类…

性能优化-react路由懒加载和组件懒加载

背景 随着项目越来越大&#xff0c;打包后的包体积也越来越大&#xff0c;严重影响了首屏加载速度&#xff0c;需要对路由和组件做懒加载处理 主要用到了react中的lazy和Suspense。 废话不多说&#xff0c;直接上干货 路由懒加载 核心代码 import React, { lazy, Suspens…