【MySQL】表的查询与连接

news2024/11/26 4:27:20

文章目录

  • 预备工作
  • 一、表的基本查询
    • 1、简单基本查询
    • 2、分组聚合统计
    • 3、基本查询练习
  • 二、表的复合查询
    • 1、多表查询
    • 2、子查询
      • 2.1 **单行子查询**
      • 2.2 **多行子查询**
      • 2.3 **多列子查询**
      • 2.4 在from子句中使用子查询
    • 3、合并查询
  • 三、表的连接
    • 1、自连接
    • 2、内连接
    • 3、外连接

预备工作

scott 数据库是 oracle 9i 的经典测试数据库,用于为初学者提供一些简单的应用示例,便于初学者进行练习,其中的表和表间的关系演示了关系型数据库的一些基本原理。本文所有的查询工作都是基于 scott 数据库进行的,scott 数据库的 .sql 文件代码如下:

DROP database IF EXISTS `scott`;
CREATE database IF NOT EXISTS `scott` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

USE `scott`;

DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `deptno` int(2) unsigned zerofill NOT NULL COMMENT '部门编号',
  `dname` varchar(14) DEFAULT NULL COMMENT '部门名称',
  `loc` varchar(13) DEFAULT NULL COMMENT '部门所在地点'
);


DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
  `empno` int(6) unsigned zerofill NOT NULL COMMENT '雇员编号',
  `ename` varchar(10) DEFAULT NULL COMMENT '雇员姓名',
  `job` varchar(9) DEFAULT NULL COMMENT '雇员职位',
  `mgr` int(4) unsigned zerofill DEFAULT NULL COMMENT '雇员领导编号',
  `hiredate` datetime DEFAULT NULL COMMENT '雇佣时间',
  `sal` decimal(7,2) DEFAULT NULL COMMENT '工资月薪',
  `comm` decimal(7,2) DEFAULT NULL COMMENT '奖金',
  `deptno` int(2) unsigned zerofill DEFAULT NULL COMMENT '部门编号'
);


DROP TABLE IF EXISTS `salgrade`;
CREATE TABLE `salgrade` (
  `grade` int(11) DEFAULT NULL COMMENT '等级',
  `losal` int(11) DEFAULT NULL COMMENT '此等级最低工资',
  `hisal` int(11) DEFAULT NULL COMMENT '此等级最高工资'
);


insert into dept (deptno, dname, loc)
values (10, 'ACCOUNTING', 'NEW YORK');
insert into dept (deptno, dname, loc)
values (20, 'RESEARCH', 'DALLAS');
insert into dept (deptno, dname, loc)
values (30, 'SALES', 'CHICAGO');
insert into dept (deptno, dname, loc)
values (40, 'OPERATIONS', 'BOSTON');

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7844, 'TURNER', 'SALESMAN', 7698,'1981-09-08', 1500, 0, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);

insert into salgrade (grade, losal, hisal) values (1, 700, 1200);
insert into salgrade (grade, losal, hisal) values (2, 1201, 1400);
insert into salgrade (grade, losal, hisal) values (3, 1401, 2000);
insert into salgrade (grade, losal, hisal) values (4, 2001, 3000);
insert into salgrade (grade, losal, hisal) values (5, 3001, 9999);

大家可以在自己的工作目录下创建 scott_data.sql 文件,然后将上述代码拷贝进去,最后在 mysql 中使用 source 语句将其导入即可。

scott 数据库中一共有三张表 – emp、dept、salgrade,它们分别代表员工信息、部门信息以及薪资等级信息,具体的表结构以及表中数据如下:image-20231013143819700


一、表的基本查询

1、简单基本查询

MySQL 表查询的基本语法格式如下:

SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...

其中 select from where 是查询的基本关键字,其余部分关键字的含义如下:

  • distinct:对查询到的结果进行去重。
  • order by:按照某一列或某几列对查询结果进行排序,默认使用 ASC 排升序,排降序可以指定 DESC。
  • limit:筛选分页结果,即指定显示查询结果的哪些行。(注:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死)

注意:MySQL 不区分大小写和单双引号,所以这些关键字在使用是无论是大写还是小写都可以。

下面是关于针对这些关键字使用的一些基本案例:

  • 查找SMITH员工的基本信息,包括员工名、部门号以及薪资。
select ename, deptno, sal from emp where ename = 'SMITH';

image-20231013144807630

  • 查询所有员工的工资信息,并按工资降序排序。
select ename, sal from emp order by sal desc;

image-20231013144820453

  • 查找公司中工龄排名前三的员工。
select ename, hiredate from emp order by hiredate asc limit 3;

image-20231013145400736

2、分组聚合统计

聚合统计

MySQL 中存在一些用于对数据进行计算和汇总的聚合函数,它们可以对一组行的数据执行操作,并返回单个结果。常见的聚合函数如下:

-函数-说明
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义
  • 统计公司一共有多少员工以及公司所有的最高、最低工资分别是多少。
select count(*) 员工数量, max(sal) 最高工资, min(sal) 最低工资 from emp;

image-20231013150319521

分组聚合统计

除了聚合统计,MySQL 还支持在 select 中使用 group by 子句对指定列进行分组查询,group by 字句通常需要配合聚合函数使用。

  • 如何显示每个部门的平均工资和最高工资。
select deptno, max(sal) 最高工资, min(sal) 最低工资 from emp group by deptno;

image-20231013152236080

如何理解分组 (重要):

在上面的案例中,我们要求每个部门的平均工资与最高工作,然而 scott 中并没有为每一个部门单独 create 一个工资表,而只有一个 emp 表,里面包含了所有部门的员工信息,所以我们需要对 emp 表按照 deptno 进行分组。

按照 deptno 进行 group by 之后,一张物理上的 emp 表就在逻辑上被分为了三张子表,每张子表中员工的部门号是相同的;所以我们就可以 将分组理解为分表 – 这个分表不是真的将存储在数据库中的一张 emp 表分为了三张表,而是将 emp 分成了逻辑上的三张表。

那么现在,我们只需要分别对每一张子表进行聚合统计得到最高工资和平均工作即可;所以,通过 “分表”,我们就可以将分组查询简化理解为对分组得到的子表的查询,只需要在最后面添加 group by 子句即可

注:在分组查询中,select 后面的列信息通常只能包含聚合函数以及出现在分组条件中的列。image-20231013154137865

现在我们用 “分表” 的思想来求一下每个部门的每种岗位的平均工资和最低工资:

求每个部门每种岗位的平均工资与最低工资,肯定需要按部门和岗位进行分组,而分组就是分表,所以我们可以理解为对分组后得到的子表进行聚合统计查询平均工资和最低工资 – select deptno, job, avg(sal), min(sal) from emp,最后再加上 group by deptno, job 即可。

select deptno, job, avg(sal) 平均工资, max(sal) 最高工资 from emp group by deptno, job;

image-20231013154816032

having 条件筛选

having 用于和 group by 配合使用,对 group by 的结果进行过滤。

  • 显示平均工资低于2000的部门和它的平均工资。
select deptno, avg(sal) 平均工资 from emp group by deptno having 平均工资 < 2000;

image-20231013155553867

如何理解 where 和 having 的关系

where 和 having 都是用于条件筛选的关键字,二者的区别在于 where 主要用于在查询一张表时对查询条件做筛选;而 having 主要用于在分组时对分组的结果进行筛选。其实把 having 当成 where 来用 MySQL 的语法也不会报错,但我们不建议这样做。

SQL 查询中各个关键字的执行先后顺序

from > on > join > where > group by > with > having > select > distinct > order by > limit

3、基本查询练习

  • 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J;
select * from emp where (sal > 100 or job = 'MANAGER') and ename like 'J%';
  • 按照部门号升序而雇员的工资降序排序;
select * from emp order by deptno asc, sal desc;
  • 使用年薪进行降序排序;
select ename, sal*12+ifnull(comm, 0) 年薪 from emp order by 年薪 desc;
  • 显示工资高于平均工资的员工信息;
select * from emp where sal > (select avg(sal) from emp);
  • 显示每个部门的平均工资和最高工资;
select avg(sal) 平均工资, max(sal)最高工资 from emp group by deptno;
  • 显示每种岗位的雇员总数,平均工资;
select job, count(*) 雇员总数, avg(sal) 平均工资 from emp group by job;

二、表的复合查询

1、多表查询

上面我们讲解的 mysql 表的查询都是对一张表进行查询,但在实际开发中数据往往来自不同的表,所以我们需要进行多表查询。

笛卡尔积

笛卡尔积(Cartesian Product)是指在没有使用任何条件连接的情况下,将两个或多个表中的每一行与其他表中的每一行进行组合,从而得到一个包含所有可能组合的表。如下:image-20231013162315401

  • 显示雇员名、雇员工资以及所在部门的名字。

题目要求我们显示雇员名、雇员工资以及所在部门的名字,其中名、雇员工资都在 emp 表中,但是部门名字在 dept 表中,所以我们需要对 emp 和 dept 这两张表做笛卡尔积,然后再筛选掉不需要的行即可。image-20231013163005786

select ename, sal, dname from emp, dept where emp.deptno = dept.deptno;

image-20231013163118450

  • 显示各个员工的姓名,工资,及工资级别;
select ename, sal, grade from emp, salgrade where sal between losal and hisal;

image-20231013163407008

总结:其实多表查询本质上也是单表查询 – 对两张表笛卡尔积的结果 (单表) 进行条件筛选与查询。

2、子查询

子查询是指嵌入在其他 sql 语句中的 select 语句,也叫嵌套查询。

2.1 单行子查询

单行子查询是指嵌入在其他 sql 语句中的 select 语句的结果只有一行一列,即单个数据。

  • 显示SMITH同一部门的员工。

显示SMITH同一部门的员工一共分为两步:1. 找出SMITH所在的部门;2. 找出在此部门工作的员工。而第一步的结果是单个数据(一个员工只属于一个部门),这就是单行子查询。

select * from emp where deptno = (select deptno from emp where ename = 'SMITH');

image-20231013164220147

2.2 多行子查询

单行子查询是指嵌入在其他 sql 语句中的 select 语句的结果有多行,但只有一列,即多个数据。

与多行子查询相关的关键字有三个:

  • in:表示在其中,即与多个数据中的一个相等即可。
  • all:表示全部,即大于/小于/… 多个数据中的全部。
  • any:表示任意,即大于/小于/… 多个数据中的任意一个。

  • 查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的。
select ename, job, sal, deptno from emp where job in (select job from emp where deptno = 10) and deptno != 10;

image-20231013164911433

  • 显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。
select ename, sal, deptno from emp where sal > all (select sal from emp where deptno = 30);

image-20231013165102259

  • 显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)。
select ename, sal, deptno from emp where sal > any (select sal from emp where deptno = 30);

image-20231013165245441

2.3 多列子查询

多列子查询是指嵌入在其他 sql 语句中的 select 语句的结果有多列 (不一定有多行)。多列子查询中也可以使用 in/all/any 关键字。

  • 查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人。
select ename from emp where (deptno, job) = (select deptno, job from emp where ename='SMITH') and ename <> 'SMITH';

image-20231013165622464

2.4 在from子句中使用子查询

对 mysql 表的理解

在前面分组聚合统计中我们提到,分组其实就是 “分表”,我们可以将分组的结果当成逻辑上的子表来看待,然后分组查询就简化为了对子表进行查询,而这其实就是最基础的表查询。

同样,我们也可以将 select 查询过程中的中间结果以及查询出来的最终结果都看作是逻辑上的表,那么我们自然也就可以将这个 “表” 放在 from 子句的后面了。

所以,我们可以认为 mysql 中一切皆表,任何表的查询其本质上都是单表查询,这和我们 Linux 中的一切皆文件很类似。


比如,我们要显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资,我们可以一步步的来拆解这个查询:

  1. 查出每个部门的平均工资:

    select deptno, avg(sal) avg_sal from emp group by deptno;
    
  2. 将查询出来的 “deptno, avg_sal” 这个中间结果当成表,与 emp 表进行笛卡尔积,得到一张新的表:

    select * from emp t1, (select deptno, avg(sal) avg_sal from emp group by deptno) t2;
    
  3. 在这个大的表中找出是同一部门且工作高于部门平均工资 agv_sal 的员工的姓名、部门、工资以及部门的平均工资:

    select t1.ename, t1.deptno, t1.sal, t2.avg_sal from emp t1, (select deptno, avg(sal) avg_sal from emp group by deptno) t2 where t1.deptno = t2.deptno and t1.sal > t2.avg_sal;
    

image-20231013171905741


查找每个部门工资最高的人的姓名、工资、部门、最高工资:

  1. 找出每个部门工资最高的人:

    select deptno, max(sal) max_sal from emp group by deptno;
    
  2. 将这个表与 emp 表进行笛卡尔积:

    select * from emp t1, (select deptno, max(sal) max_sal from emp group by deptno) t2;
    
  3. 在这个大表中找出同一部门且工资等于部门最高工资的员工的姓名、工资、部门以及部门的最高工资:

    select t1.ename, t1.sal, t1.deptno, t2.max_sal from emp t1, (select deptno, max(sal) max_sal from emp group by deptno) t2 where t1.deptno = t2.deptno and t1.sal = t2.max_sal;
    

image-20231013172913634


  • 显示每个部门的信息(部门名,编号,地址)和人员数量。
select t1.dname, t1.deptno, t1.loc, t2.peo_num from dept t1, (select deptno, count(*) peo_num from emp group by deptno) t2 where t1.deptno = t2.deptno;

image-20231013175330946


3、合并查询

在实际应用中,为了合并多个 select 的执行结果,可以使用集合操作符 union,union all。

union

union 操作符用于取得两个结果集的并集,当使用该操作符时,会自动去掉结果集中的重复行。

  • 将工资大于2500或职位是MANAGER的人找出来。
select * from emp where sal > 2500 union select * from emp where job = 'MANAGER';

image-20231013175646899

union all

union all 操作符用于取得两个结果集的并集,当使用该操作符时,不会去掉结果集中的重复行。

select * from emp where sal > 2500 union all select * from emp where job = 'MANAGER';

image-20231013175834566


三、表的连接

1、自连接

自连接是指在同一张表上进行连接查询,即自己与自己做笛卡尔积。

  • 显示员工FORD的上级领导的编号和姓名。
select t2.empno, t2.ename from emp t1, emp t2 where t1.ename = 'FORD' and t2.empno = t1.mgr;

image-20231013180600407

2、内连接

内连接实际上就是利用 where 子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询本质上也是内连接,内连接也是在开发过程中使用的最多的连接查询。

内连接语法如下:

select 字段 from1 inner join2 on 连接条件 and 其他条件;
  • 显示SMITH的名字和部门名称。
select emp.ename, dept.dname from emp inner join dept on emp.deptno = dept.deptno and emp.ename = 'SMITH';

image-20231013180939195

3、外连接

外连接分为左外连接和右外连接。

左外连接

左外连接是指左边表中的数据保持不变,右边表中的数据按照筛选条件过滤,记录不足的列使用 NULL 填充,然后将二者连接起来。

语法如下:

select 字段名  from 表名1 left join 表名2 on 连接条件
  • 列出部门名称和这些部门的员工信息,同时列出没有员工的部门。
select dept.dname, emp.* from dept left join emp on dept.deptno = emp.deptno;

image-20231013185603837

右外连接

右外连接是指右外表中的数据保持不变,右外表中的数据按照筛选条件过滤,记录不足的列使用 NULL 填充,然后将二者连接起来。

语法如下:

select 字段名  from 表名1 right join 表名2 on 连接条件

注:其实左外连接完全可以实现右外连接的效果 – 将左右两张表的顺序交换即可。

  • 列出部门名称和这些部门的员工信息,同时列出没有员工的部门。
select dept.dname, emp.* from emp right join dept on dept.deptno = emp.deptno;

image-20231013185928004


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

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

相关文章

【C++】关键字 命名空间 输入输出 缺省函数

一&#xff0c;C关键字 C 总计 63 个关键字&#xff0c;C语言 32 个关键字 直接上图&#xff1a; asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatche…

Win11更新后瘦身C盘的两个小技巧

每当windows更新完后&#xff0c;就很容易出现一个现象&#xff0c;那便是C盘存储变红了。 这个时候&#xff0c;就会有方法指出&#xff1a;把C盘中的系统更新文件清理掉吧&#xff0c;这样C盘就又能瘦回去了&#xff01; 然而&#xff0c;当你兴冲冲地按照网上的教程点击C…

OPTEE之KASAN地址消毒动态代码分析

安全之安全(security)博客目录导读 目录 一、KASAN简介 二、OPTEE_OS中KASAN配置选项 三、OPTEE_OS中KASAN配置选项打开 一、KASAN简介 内核地址消毒器(KASAN)是Linux内核的快速内存损坏检测器&#xff0c;KASAN检测slab、page_alloc、vmalloc、stack和全局内存中的越界、u…

Yarn基础入门

文章目录 一、Yarn资源调度器1、架构2、Yarn工作机制3、HDFS、YARN、MR关系4、作业提交之HDFS&MapReduce 二、Yarn调度器和调度算法1、先进先出调度器&#xff08;FIFO&#xff09;2、容量调度器&#xff08;Capacity Scheduler&#xff09;3、公平调度器&#xff08;Fair …

信钰证券:首板第二天买入技巧?

股票上市第一天&#xff0c;也就是所谓的“首板”&#xff0c;一般会引起商场的高度注重。那么关于投资者而言&#xff0c;如安在接下来的第二天进行买入是个十分要害的决议计划。本文将从多个角度剖析首板第二天买入技巧&#xff0c;供读者参阅。 首先&#xff0c;多数人或许…

京东数据平台:2023年服饰行业销售数据分析

最近看到有些消费机构分析&#xff0c;不少知名的运动品牌都把“主战场”放到了冲锋衣&#xff0c;那么羽绒服市场就比较危险了。但其实羽绒服市场也有机会点可寻。 先来说冲锋衣。的确&#xff0c;从今年的销售数据以及增长情况&#xff0c;冲锋衣的确会是今年冬天的大热门品…

领跑新周期!高通8295/8255上车,这家厂商已经整装待发

围绕高通下一代8295/8255平台&#xff0c;一场激烈的市场争夺战已经打响。 目前&#xff0c;各大域控制器厂商、汽车软件厂商围绕高通8295/8255平台&#xff0c;已经推出了诸多的解决方案&#xff0c;以抢占下一代高性能SoC带来的全新市场红利。《高工智能汽车》了解到&#x…

炮轰特斯拉「无图」,一家老牌图商的反击

‍作者|张祥威 编辑|德新 为实现城市NOA&#xff0c;车厂近年将重感知、轻地图奉为圭臬&#xff0c;一些玩家甚至提出「无图」概念&#xff0c;这让高精度地图供应商倍感压力。 四维图新CEO程鹏是坚定的反「无图」论者&#xff0c;他不太理解喊无图的目的是什么。后来和各家交…

idea 相关配置

idea 相关配置 / 设置 1. 插件设置 下载插件代理&#xff1a; https://plugins.jetbrains.com推荐插件下载&#xff1a; Sequence Diagram 时序图Rainbow Brackets 彩虹括号MyBatisX 在 MyBatis 中写的 mapper 可以跳转maven helper 右键运行 maven 指令Lombok简化 getter …

【数据库——MySQL(实战项目1)】(4)图书借阅系统——触发器

目录 1. 简述2. 功能代码2.1 创建两个触发器&#xff0c;分别在借出或归还图书时&#xff0c;修改借阅人表中的已借数目(附加&#xff1a;借阅人表的总借书数、图书表的借阅次数以及更新图书表的图书状态为(已借出/在架上))字段&#xff1b;2.2 创建触发器&#xff0c;当借阅者…

测试老鸟,Jmeter两种方法造接口性能测试数据(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 通过接口构造测试…

mysql面试题51:你是如何监控你们的数据库的?你们的慢日志都是怎么查询的?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:你是如何监控你们的数据库的? 监控数据库是确保数据库系统稳定性和性能的重要工作。下面是一些常见的方法和工具: 监控工具选择:选择适合你的数…

排序:为什么插入排序比冒泡排序更受欢迎?

文章来源于极客时间前google工程师−王争专栏。 需掌握的的排序&#xff1a;冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。按照时间复杂度可以分为三类&#xff1a; 问题&#xff1a;插入排序和冒泡排序的时间复杂度相同&#xff0c;都是O(…

UML组件图综合指南:设计清晰、可维护的软件系统

介绍&#xff1a; UML&#xff08;Unified Modeling Language&#xff09;组件图是软件系统设计中的重要工具&#xff0c;用于描绘系统的物理结构和组件之间的关系。在软件工程中&#xff0c;通过创建清晰的组件图&#xff0c;团队能够更好地理解系统的模块化结构和组织关系&a…

PTE考试解析

Pte 考试题目 注入漏洞 空格被过滤 用/**/代替空格&#xff0c;发现#被过滤 对&#xff03;进行url编码为%23 输入构造好的payload http://172.16.12.100:81/vulnerabilities/fu1.php?id1%27)/**/and/**/11%23 http://172.16.12.100:81/vulnerabilities/fu1.php?id1%27)/*…

uniapp 一次性上传多条视频 u-upload accept=“video“ uni.chooseMedia uni.uploadFile

方式 一 部分安卓机 只能一条一条传视频 文档地址 uview 2.0 Upload 上传组件 html <view class"formupload"><u-upload accept"video":fileList"fileList3" afterRead"afterRead" delete"deletePic" name"…

解锁远程联机模式:使用MCSM面板搭建我的世界服务器,并实现内网穿透公网访问

文章目录 前言1.Mcsmanager安装2.创建Minecraft服务器3.本地测试联机4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射内网端口 5.远程联机测试6. 配置固定远程联机端口地址6.1 保留一个固定TCP地址6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 前言 MCSManager是一个…

动态资源平衡:主流虚拟化 DRS 机制分析与 SmartX 超融合的实现优化

资源的动态调度是虚拟化软件&#xff08;或超融合软件&#xff09;中的一项重要功能&#xff0c;主要指在虚拟化集群中&#xff0c;通过动态改变虚拟机的分布&#xff0c;达到优化集群可用性的目标。这一功能以 VMware vSphere 发布的 Distributed Resource Scheduler&#xff…

atoi函数及其模拟实现

这个函数的功能是将字符串转换为整形&#xff0c;那么具体是怎么样的呢 先看几个例子&#xff1a; 有一个转换为整形的最大值 刚开始就是非法字符 因此&#xff0c;我们模拟实现时&#xff0c;要考虑以上几种非法输入情况&#xff1a; 1.空字符串 2.空白字符 3.处理-号 4.过大…

C++算法:城市天际线问题

题目 城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度&#xff0c;请返回 由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示&#xff0c;其中三元组 buildings[i] [lefti, righti, heighti] 表示&am…