当前位置: 首页 > news >正文

【MySQL】复合查询+表的内外连接

复合查询+表的内外连接

  • 1.基本查询回顾
  • 2.多表查询
  • 3.自连接
  • 4.子查询
    • 4.1单列子查询
    • 4.2多列子查询
  • 5.在from子句中使用子查询
  • 6.合并查询
  • 7.表的内连和外连
    • 7.1内连接
    • 7.2外连接
      • 7.2.1左外连接
      • 7.2.2右外连接

在这里插入图片描述

点赞👍👍收藏🌟🌟关注💖💖
你的支持是对我最大的鼓励,我们一起努力吧!😃😃

前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够,未来可能还有多表查询,子查询。

1.基本查询回顾

查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J

下面有两种写法,都没问题

select * from emp where (sal>500 or job='MANAGER') and ename like 'J%';select * from emp where (sal>500 or job='MANAGER') and 'J'=substring(ename,1,1);

在这里插入图片描述

按照部门号升序而雇员的工资降序排序

select * from emp order by deptno asc,sal desc;

在这里插入图片描述

使用年薪进行降序排序

我们看到这个表奖金这一列有的是有的,有的是没有的为null,年薪=月薪*12+奖金
,但是null不参与运算,我们前面刚学的ifnull函数这个时候就可以用上了

在这里插入图片描述

ifnull(val1,val2),如果val1为null,返回val2,否则返回val1的值

select ename,sal*12+ifnull(comm,0) 年薪 from emp order by 年薪 desc;

在这里插入图片描述

显示工资最高的员工的名字和工作岗位
最高工资我们可以使用聚合函数做统计,但是聚合函数只是对一列的相同数据做聚合,今天还要有名字,所以单纯的做聚合是无法满足需求的,它只能最高工资是多少。名字和工作岗位显示不出来。

因此我们先找最高工资是多少。然后拿着这个最高工资去把这个人和工作岗位找到。很显然这是两句select。

在这里插入图片描述

但是这样写太挫了。怎么办呢,想办法把两个select查询语句合在一块写。
sql允许在一条sql内部在执行select查询,这称为子查询先执行内部的sql然后在执行外部的sql

select ename,job,sal from emp where sal=(select max(sal) from emp);

在这里插入图片描述

显示工资高于平均工资的员工信息

还是要先使用聚合函数把平均工资找到,然后在找到工资高于平均工资的员工。因此还可以使用子查询。

select * from emp where sal>(select avg(sal) from emp);

在这里插入图片描述

显示每个部门的平均工资和最高工资

首先是对部门分组,分组就是分表,表分好之后一个表内部门号是相同的,然后就是在每张表中找每个部门的平均工资和最高工资。其实在子表和在一个整表内找是一样的。在我看来不管是整表还是子表其实都是在表内查询。

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

在这里插入图片描述

显示平均工资低于2000的部门号和它的平均工资

这里要的是平均工资低于2000的部门号,因此要按照部门号分组,统计出每个部分的平均工资,然后在筛选出低于2000的部门号和平均工资

select deptno,avg(sal) myavg from emp group by deptno having myavg<2000;

在这里插入图片描述

显示每种岗位的雇员总数,平均工资

这个不就是对岗位分组,然后在统计每个岗位的人数和平均工资

select job,count(*),avg(sal) from emp group by job;

在这里插入图片描述

2.多表查询

以前我们都是从一张表拿数据,但是实际开发中往往数据来自不同的表,所以需要多表查询。

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

在这里插入图片描述
我们发现上面emp表中是没有部门名称的,换句话说要的数据是从两张表来的。
员工名和员工工资来自于emp表,部门名称来来自于dept表,因此注定了我们要将两个表做整合然后在查询。

select * from emp,dept;

可以看到形成了一张大表,仔细观察一下,将两张表信息做整合的时候,就光SMITH这一条消息就和整个dept表做组合形成了更多的记录,发现下面都是这样的。

在这里插入图片描述

我们可以看到如果今天对两张表的信息做组合,新形成表本质是将两张表中数据进行穷举组合的结果。我们把它称之为笛卡尔积。

在我们看来这不就是把两张表变成了一张表吗。所以未来在做数据的查找的时候,不就还是相当于单表的查找吗!然后就可以按照条件筛选出想要的信息。注意穷举是把所有组合结果都放在一起了,但是有些信息是有无意义的,因此可以先去除无意义的信息(不过还是看具体情况在决定是否保留),然后在按条件查找。

去除无效信息

在这里插入图片描述

在按条件筛选

在这里插入图片描述
在我们看来mysql一切皆表,换句话说这里做笛卡尔积之后,它形成的组合结果也是表结构,然后按照条件筛选
在这里插入图片描述

显示部门号为10的部门名,员工名和工资

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

注意,如果指定的字段是这个表中是唯一的字段,不用指定表名直接显示即可,如果不是这个表中唯一的字段就需要指定表名显示,用来区分要显示是那个表的字段。

在这里插入图片描述

显示各个员工的姓名,工资,及工资级别
emp表中有员工的姓名和工资,工资级别在工资表里的,因此也还要将两个表笛卡尔积。

select ename,sal,grade from emp t1,salgrade t2 where t1.sal between t2.losal and t2.hisal;

在这里插入图片描述

上面我们是将两个不同的表做笛卡尔积,那可不可以把同一张表做笛卡尔积呢?

3.自连接

自连接是指同一张表做笛卡尔积。

我们发现直接把同一张表做笛卡尔积是不行的。主要原因这是同一张表这样不太好,字段名有重复不知道用的是那个表的字段名。

在这里插入图片描述

因此我们可以给两个表做重命名

重命名也可以对表进行重命名,一旦对表进行重命名之后几乎可以在这条sql语句任何地方出现。因为sql语句执行一定是先告诉是从那个表拿数据。

在这里插入图片描述

我们看到同一个表也是拿着前面的表每一条记录去和后面的表中所有记录做组合。所以哪怕是同一张表也可以做笛卡尔积,只不过是对表名重新命名一下即可。

显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号–empno)

在这里插入图片描述

我们首先会想到把这个人的领导编号拿到,然后根据这个编号在去找这个人拿到他的信息。两条select查询语句,但是我们可以把两个整和成一条sql语句

select empno,ename from emp where empno=(select mgr from emp where ename='FORD');

在这里插入图片描述

还有一种做法,我们发现 先找到FORD的领导编是要从 EMP 表中找,然后根据领导编号找领导信息也是要从 EMP 表中找。 因此我们可以把同一张表自连接然后再找。

在这里插入图片描述

select t2.empno,t2.ename from emp t1,emp t2 where t1.mgr=t2.empno and t1.ename='FORD';

在这里插入图片描述

4.子查询

在之前编写的时候,子查询我们也写了一些。现在我们正式来说一下子查询的概念。除了刚才的笛卡尔积是一种整合表的做法,子查询也是多表查询或者一张表中复杂查询时常用的做法。

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
一般我们在子查询时依赖的永远都是子查询查出来的结果,根据结果我们可以把子查询划分为单列单行子查询、单例多行子查询、多列单行子查询、多列多行子查询。

4.1单列子查询

单例单行子查询

显示SMITH同一部门的员工

首先会执行子查询将SMITH的部门号查出来,然后充当外面select的筛选条件。

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

子查询筛选出来的是单列单行的信息。

在这里插入图片描述

单列多行子查询

子查询筛选出来的是单例多行的信息。

in关键字 判断一个列值是否在集合中。
查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的

select ename,job,sal,deptno from emp where job in(select job from emp where deptno) and deptno<>10;

在这里插入图片描述

查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的,并且知道对应的员工属于哪一个部门的名字

还想要名字怎么办呢,但是emp里面并没有部门名字,只有dept表里面有。结合刚才所学,我们可以进行多表查询。首先确定一定要用的是dept表,还有一张表用谁呢?刚才我们不是已经得到一张表了。所以就把dept表和刚才的表做笛卡尔积。

子查询不仅可以在where充当筛选条件,还可以在from中,先用下面在解释。

在这里插入图片描述

然后去除不对的信息,就得到我们要的数据了

select ename,job,sal,tmp.deptno,dname from (select ename,job,sal,deptno from emp where job in(select job from emp where deptno=10) and deptno<>10) as tmp,dept where tmp.deptno=dept.deptno;

在这里插入图片描述

我们不仅仅用子查询把要的结果筛选出来,我想说的是,一个SQL整体的查询结果本身就是表结构,mysql一切解表,所以不要认为只有物理上真实存在的表才可以做笛卡尔积,我们可以将一个查出来的表结构也可以和其他表或者其他查询结果做笛卡尔积。其次,子查询不仅能出现在where后面充当判断条件,而且也能出现在from后面充当笛卡尔积。 在from哪里解释。

显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
可能会想到先把30号部门最高工资先拿到,然后在去筛选比30号部门最高工资还高的信息。

在这里插入图片描述

下面这种写法我们也是先查找30部分最高工资然后充当筛选条件,在筛选

select ename,sal,deptno from emp where sal>(select max(sal) from emp where deptno=30);

在这里插入图片描述

除了这样的写法之外,我们还有一种做法,先把30号部门工资筛选出来,然后使用
all关键字 表示全部

select ename,sal,deptno from emp where sal>all(select distinct sal from emp where deptno=30);

在这里插入图片描述

显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)
只要比30号部分任意一个人工资高就可以了
any关键字 表示任意

select ename,sal,deptno from emp where sal>any(select distinct sal from emp where deptno=30);

在这里插入图片描述

4.2多列子查询

单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。

查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH') and ename<>'SMITH';

子查询查出来的多列单行,没关系mysql支持( ,)

在这里插入图片描述

select * from emp where (deptno,job) in (select deptno,job from emp where ename='SMITH') and ename<>'SMITH';

我们发现这里也支持子查询多列多行

在这里插入图片描述

目前全部的子查询,全部都在where子句中,充当判断条件!但是任何时刻,查询出来的临时结构,本质在逻辑上也是表结构!

5.在from子句中使用子查询

子查询不仅可以出现where中充当判断条件,也可以出现在from中,from是在sql中告诉数据库去那个表里拿数据。在这里说一下任意查出来的表结构在我看来全都是表结构。子查询语句出现在from子句中,把一个子查询结果当做一个临时表使用,可以解决很多问题。

显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资
首先我们要把每个部门的平均工资拎出来,如果找呢?那就需要分组然后聚合统计了。然后找出高于自己部门平均工资的姓名、部门、工资、平均工资。这个怎么找呢?如果你想的子查询找出自己部门的平均工资然后在做筛选找出这个部门中高于平均工资的,你会发现你做不下去的,因为今天这里并不是一个部门。首先我们先把每个部门平均工资拿出来走一步看一步。

select deptno,avg(sal) myavg from emp group by deptno;

按照之前这就是多列多行子查询,然后在子查询去where中筛选可能就比较麻烦了

在这里插入图片描述

可以看我们目前有什么,目前我们有部门号和部门平均工资,在我看来这就是一张表,然后我手里还有一张员工表,所以是不是可以把两张表做笛卡尔积,做完之后每个员工它所在那个部门已经所在部门的平均工资,在新的表中不就有了吗

子查询做表必须要给一个别名

select * from emp,(select deptno,avg(sal) myavg from emp group by deptno) tmp;

这个笛卡尔积将两张表的信息做了穷举,可是做完笛卡尔积有些信息是有意义的,有些一看就无意义的的,就如一个员工所属部门它目前并不需要和它不是同一个部门号的平均工资做对比,如果将来需要再说。因此可以过滤掉。

在这里插入图片描述

select * from emp,(select deptno,avg(sal) myavg from emp group by deptno) tmp where emp.deptno=tmp.deptno;

筛选之后,现在这不就是一张符合条件的单表查询了吗

在这里插入图片描述

然后在这张表里,在筛选出需要的信息就可以了

select ename,emp.deptno,sal,myavg from emp,(select deptno,avg(sal) myavg from emp group by deptno) tmp where emp.deptno=tmp.deptno and sal>myavg;

在这里插入图片描述

如果再加要求呢,要求这些人的办公地点在哪里?很简单我们可以把上面筛选出来的表结构充当一个表然后再和物理存在的dept表做笛卡尔积。

然后不又得到一张表了吗

在这里插入图片描述

然后只把有意义的消息筛选出来,

select * from dept,(select ename,emp.deptno,sal,myavg from emp,(select deptno,avg(sal) myavg from emp group by deptno) tmp where emp.deptno=tmp.deptno and sal>myavg) tmp where dept.deptno=tmp.deptno;

在这里插入图片描述

在把谁在哪里上班,部门号是多少消息拿出来不就好了吗

select tmp.ename,dept.loc,tmp.deptno from dept,(select ename,emp.deptno,sal,myavg from emp,(select deptno,avg(sal) myavg from emp group by deptno) tmp where emp.deptnmp.deptno=tmp.deptno and sal>myavg) tmp where dept.deptno=tmp.deptno;

在这里插入图片描述

只要你想做还可以在笛卡尔积。所以我们面对非常复杂的查询本质上都是在任务分解,复杂问题是由简单问题构成的。

查找每个部门工资最高的人的姓名、工资、部门、最高工资
首先也是要分组聚合统计找每个部门的最高工资,只不过只能统计到部门号和部门工资,这个人其他信息是没有办法在group by找到的。然后我们把这个临时表结构和emp做笛卡尔积。 最后在筛选出来部门号相同的,这个时候不有我们想要的信息的一张表了吗,然后在筛选自己想要的信息。

在这里插入图片描述

然后筛选出部门号相同的信息,最后找出自己要的数据就可以了

select ename,sal,emp.deptno,mymax from emp,(select deptno,max(sal) mymax from emp group by deptno) tmp where emp.deptno=tmp.deptno and sal=mymax;

在这里插入图片描述

记住mysql一切皆表,所谓的一切皆表就意味着可以把查询出来的临时结果在from后面也充当表。

显示每个部门的信息(部门名,编号,地址)和人员数量
首先人员数量一定是聚合出来的员工表里面是没有这个信息的。其次部门名、编号、地址是在dept表里面的。因此我们还可以像上面的做法一样解决。

select t1.deptno,dname,loc,mycnt from dept t1,(select deptno,count(*) mycnt from emp group by deptno) t2 where t1.deptno=t2.deptno;

在这里插入图片描述

其实还有一种方法就是单纯使用多表,不涉及子查询,不过这样太简单粗暴了,不够优雅!直接对emp表和dept表做笛卡尔积,然后筛选出部门和相同的一张表,然后对这张表做分组,分组之后在做聚合统计。

select t2.deptno,t2.dname,t2.loc,count(*) mycnt from emp t1,dept t2 where t1.deptno=t2.deptno group by t2.deptno,t2.dname,t2.loc;

要的信息除了部门号和人员数量,还有编号和地址,但是根据我们前面所学知识知道分组聚合统计只有跟在group by后面的列和聚合函数才可以聚合情况下出现,因此还要对编号和地址分组。

在这里插入图片描述

这种方法并不推荐,推荐使用子查询多表这种方法。

总结一下:mysql在我的心里是没有多表结构的,永远就是一张表。group by在我看来也是一张表,分组就是分表。只要解决一个问题其他都是解决。 多张表我可以在where中充当判断条件,在from中也做一个表然后和其他表做笛卡尔积。所以根本就没有多表问题。

解决多表问题的本质:想办法将多表转化成为单表,所以mysql中,所有select的问题全部都可以转成单表问题!这就是我们多表查询的指导思想!

6.合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all,合并并不是笛卡尔积,笛卡尔积是将两个表的信息穷举。合并就是单纯的合起来。

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

在这里插入图片描述

将工资大于2500或职位是MANAGER的人找出来
其实我们可以直接筛选出来的,但是我们用一下union

我们可以看到这两条sql查询出来的信息是有重复的。

在这里插入图片描述

这里我们可以使用union把两条sql合并起来并且去掉重复的

在这里插入图片描述

不想去重使用union all,就会把所有信息保留

在这里插入图片描述

注意合并时,两个表结构列必须是一样的才能把两个表合并起来

在这里插入图片描述

7.表的内连和外连

表的连接分为内连和外连

7.1内连接

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

除了上面学习的from 逗号 连接两个表然后用where筛选有效信息,还可以用下面inner join连接两个表,然后用on并且可以用and级联多个筛选条件 对笛卡尔积筛选出有效信息。之前学到的其实就是内连接的一种。

语法:

select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

显示SMITH的名字和部门名称

这是之前的写法

select ename,emp.deptno,dname from emp,dept where emp.deptno=dept.deptno and ename='SMITH';

在这里插入图片描述

标准内连接写法

select ename,emp.deptno,dname from emp inner join dept on emp.deptno=dept.deptno where ename='SMITH';

两种写法都可以得到同样的数据,换句话说这种标准写法可以让我们的sql逻辑更清楚 ,哪一个部分是要形成笛卡尔积的,那一部分是进一步做条件筛选的。当然也直接用and连接,不过还是建议用where,逻辑更清楚。

在这里插入图片描述

7.2外连接

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

7.2.1左外连接

如果多表查询,我们想让左侧的表完全显示不要过任何过滤筛选,如果和右侧的表配不上,让右侧的都为空也可以。必须保持左侧表的全貌。我们就叫做左外连接。

语法:

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

我们发现目前这两张表id是对不上的。

在这里插入图片描述

查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

如果要用id做内连接的话,那只有1,2号学生符合条件,而我们要保留左侧表结构要完全显示,那内连接就不能满足条件了。因此我们使用左外连接

select * from stu left join exam on stu.id=exam.id;

左侧表完全保留,右侧表按条件拼接,条件满足直接拼上,条件不满足拼null

在这里插入图片描述

7.2.2右外连接

如果联合查询,要求右侧的表完全显示我们就说是右外连接。
其实只有左外连接也可以,把顺序换一下就可以,不过mysql这里也给我提供了右外连接。

语法:

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

对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来

select * from stu right join exam on stu.id=exam.id;

右侧表完全保留,左侧表按条件拼接,条件满足直接拼上,条件不满足拼null

在这里插入图片描述

列出部门名称和这些部门的员工信息,同时列出没有员工的部门
首先是要将dept表和emp表做连接,要求的是必须把部门全部显示出来即使没有员工,这不是要求以dep表为主吗。

这里使用左外连接和右外连接都可以,不过就是换一下位置

select dept.dname,emp.* from dept left join emp on dept.deptno=emp.deptno order by dept.deptno asc;

在这里插入图片描述

select dept.dname,emp.* from emp right join dept on dept.deptno=emp.deptno order by dept.deptno asc;

在这里插入图片描述

相关文章:

【MySQL】复合查询+表的内外连接

复合查询表的内外连接 1.基本查询回顾2.多表查询3.自连接4.子查询4.1单列子查询4.2多列子查询 5.在from子句中使用子查询6.合并查询7.表的内连和外连7.1内连接7.2外连接7.2.1左外连接7.2.2右外连接 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f…...

创建模式、结构模式及行为模式

谁在什么地方提供什么功能&#xff1f; 要设计几个类?这些类各个是什么功能&#xff1f;相互间的关系是什么&#xff1f; 创建模式指的是对象那么多&#xff0c;怎么把它"生"出来&#xff1f;生几个&#xff1f;从这个角度上来说数组就是一种另类的创建模式。主要…...

警惕IDEA 2024版重大Bug问题:LomBok失效、Gradle冲突、Spring Boot启动错误

一直以来我认为工具类的软件是越新越好&#xff0c;因为工具代表着一定的先进性&#xff1b;但是IDEA 2024好好的给我上了一课&#xff0c;比如lombok 不起作用、比如Spring Boot 3.4.x 启动报错、再比如MyBatis log plus冲突、再比如Gradle插件冲突. 一、Lombok 失效问题 请不…...

C语言中char str和char str[]的区别

char* str和char* str[]的区别&#xff1a;C语言中char *str[] 和char *str有什么区别-CSDN博客 char str 和 char str[] 在 C 语言中也有不同的含义和用途&#xff0c;以下是它们的区别&#xff1a; 1. char str 类型&#xff1a;这是一个单一的字符变量。 用途&#xff1a…...

(学习总结20)C++11 可变参数模版、lambda表达式、包装器与部分新内容添加

C11 可变参数模版、lambda表达式、包装器与部分新内容添加 一、可变参数模版基本语法及原理包扩展emplace系列接口 二、lambda表达式lambda表达式语法捕捉列表lambda的原理lambda的应用 三、包装器bindfunction 四、部分新内容添加新的类功能1.默认的移动构造和移动赋值2.声明时…...

备份和容灾之区别(The Difference between Backup and Disaster Recovery)

备份和容灾之区别 备份和容灾都是数据安全常见的保障手段&#xff0c;但是一般在正常业务运行时是无需用到这两个技术手段的。只有在业务已经崩溃&#xff0c;需要进行业务恢复时&#xff0c;这两种技术的价值才能真正体现。所以&#xff0c;备份和容灾可以说是数据安全最后两…...

Go语言之路————数组、切片、map

Go语言之路————数组、切片、map 前言一、数组二、切片三、map 前言 我是一名多年Java开发人员&#xff0c;因为工作需要现在要学习go语言&#xff0c;Go语言之路是一个系列&#xff0c;记录着我从0开始接触Go&#xff0c;到后面能正常完成工作上的业务开发的过程&#xff…...

Kotlin Bytedeco OpenCV 图像图像57 图像ROI

Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…...

字符编码通过字节数组向16进制的互转【终端设备通讯案例篇】:微信小程序 JavaScript字符串转gb2312 字符编码,以16进制字符串传输。(接收蓝牙设备的信息,发送北斗终端消息)

文章目录 引言I 原理II 案例一:微信小程序字符串转gb2312 字符编码,以16进制字符串传输。字节数组 转16进制字符串微信小程序字符串转gb2312 字节数组(utf8ToGb2312Bytes)demo:gb2312 字符编码->字节数组->16进制字符串III 案例二: 小程序接收gb2312 的16进制字符串…...

LabVIEW与WPS文件格式的兼容性

LabVIEW 本身并不原生支持将文件直接保存为 WPS 格式&#xff08;如 WPS 文档或表格&#xff09;。然而&#xff0c;可以通过几种间接的方式实现这一目标&#xff0c;确保您能将 LabVIEW 中的数据或报告转换为 WPS 可兼容的格式。以下是几种常见的解决方案&#xff1a; ​ 导出…...

协程(还需要输入3个字)

昨天我偶然听到协程这个概念&#xff0c;不禁好奇地了解了一下&#xff0c;做些笔记如下&#xff1a; 一、什么是协程 协程是在线程内部&#xff0c;由程序自己控制逻辑&#xff0c; 显式地让出控制权&#xff08;yield&#xff09;来实现任务切换&#xff0c;而不是由操作系…...

系统架构设计师-第1章-计算机系统知识要点

【本章学习建议】 根据考试大纲&#xff0c;本章主要考查系统架构设计师单选题&#xff0c;预计考1分左右。第二版教材2.2节增加了本块内容&#xff0c;但较为简略&#xff0c;需要课程补充&#xff0c;属于非重点内容。 1.1 计算机硬件组成 计算机的基本硬件系统由运算器、控…...

Linux -- 初识HTTP协议

目录 什么是HTTP协议 什么是 URL &#xff1f; 理解 URL 初识HTTP 请求与响应格式 代码验证 gitee HTTP.hpp 结果 什么是HTTP协议 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;主要用于客户端&#xff08;通常是浏览器&#…...

【已解决】我和ollama运行的qwen2.5大模型通信,总是返回GGGG?

起因&#xff1a; 和大模型通信的时候&#xff0c;总是返回 GGG 之类的乱码。 curl查询返回到结果&#xff1a; 既然curl通信不行&#xff0c;直接在控制台聊天呢&#xff1f; 话都说不明白&#xff0c;我火了&#xff0c;结果一查&#xff0c;我熄火了&#xff0c;是ollama…...

在Mac mini上实现本地话部署AI和知识库

在Mac mini上实现本地话部署AI和知识库 硬件要求&#xff1a;大模型AI&#xff0c;也叫LLM&#xff0c;需要硬件支持&#xff0c;常见的方式有2种&#xff1a;一种是采用英伟达之类支持CUDA库的GPU芯片或者专用AI芯片&#xff1b;第二种是采用苹果M系列芯片架构的支持统一内存架…...

SQL和MySQL以及DAX的日期表生成?数字型日期?将生成的日期表插入到临时表或者实体表中

几种生成日期表的方法 如何用SQL语句生成日期表呢&#xff1f; 如何用MySQL语句生成日期表呢&#xff1f; 如何用DAX语句生成日期表呢&#xff1f; 1. MySQL生成日期表 1.1 日期格式&#xff1a;yyyy-MM-dd 字符型 2024-01-02 -- 生成日期表 WITH RECURSIVE temp_dateTable …...

win32汇编环境,窗口程序中基础列表框的应用举例

;运行效果 ;win32汇编环境,窗口程序中基础列表框的应用举例 ;比如在窗口程序中生成列表框&#xff0c;增加子项&#xff0c;删除某项&#xff0c;取得指定项内容等 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;以下是ASM文件 ;>>>>>>>>>>>…...

Sentinel配置流控规则详解

前言 在微服务架构中&#xff0c;流量控制&#xff08;Flow Control&#xff09;是保障服务稳定性的重要手段之一。Sentinel作为一款开源的流量控制、熔断降级Java库&#xff0c;以其丰富的应用场景和完善的监控能力&#xff0c;在微服务保护中扮演了重要角色。本文将详细介绍…...

opencv图像基础学习

2.3图像的加密解密 源码如下&#xff1a; import cv2 import numpy as np import matplotlib.pyplot as plt def passImg():imgcv2.imread(./image/cat.jpg,0)h,wimg.shape#生成一个密码&#xff0c;加密key_imgnp.random.randint(0,256,size(h,w),dtypenp.uint8)img_addmcv2…...

递归40题!再见递归

简介&#xff1a;40个问题&#xff0c;有难有易&#xff0c;均使用递归完成&#xff0c;需要C/C的指针、字符串、数组、链表等基础知识作为基础。 1、数字出现的次数 由键盘录入一个正整数&#xff0c;求该整数中每个数字出现的次数。 输入&#xff1a;19931003 输出&#xf…...

javadoc使用dos命令生成api文档演示

新建一个文本后缀改java&#xff0c;名字改为类名 文本内容&#xff1a; /** * author ZZJ * version jdk23.0.1 */ public class Test{/*** 求输入两个参数范围以内整数的和* param n 接收的第一个参数&#xff0c;范围起点* param m 接收的第二个参数&#xff0c;范围终点*…...

OpenAI推出首个AI Agent!日常事项自动化处理!

2025 年1月15日&#xff0c;OpenAI 正式宣布推出一项名为Tasks的测试版功能 。 该功能可以根据你的需求内容和时间实现自动化处理。比方说&#xff0c;你可以设置每天早晨 7 点获取天气预报&#xff0c;或定时提醒遛狗等日常事项。 看到这里&#xff0c;有没有一种熟悉的感觉&a…...

uniapp实现“到这儿去”、拨打电话功能

"到这儿去" 在 UniApp 中实现“到这儿去”的功能,即调起地图导航至指定位置,对于不同的平台(小程序、H5、App)有不同的处理方式。下面将简单介绍如何在这些平台上实现该功能,并讨论位置信息的获取。后面需求会用到,先来找一些相关资料,并不一定很准确,但也来…...

T-SQL语言的计算机基础

T-SQL语言的计算机基础 引言 在当今信息技术迅猛发展的时代&#xff0c;数据已成为企业和组织决策的重要基础。而处理和管理数据的工具和语言也日益成为IT专业人员必备的技能之一。T-SQL&#xff08;Transact-SQL&#xff09;作为微软SQL Server数据库的扩展&#xff0c;是一…...

SpringBoot + Websocket实现系统用户消息通知

1、引入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.7</version><relativePath/> </parent> <dependencies><dependency>…...

基于 HTML5 Canvas 制作一个精美的 2048 小游戏--day 1

基于 HTML5 Canvas 制作一个精美的 2048 小游戏 在这个快节奏的生活中&#xff0c;简单而富有挑战性的游戏总能给我们带来乐趣。2048 是一款受欢迎的益智游戏&#xff0c;不仅考验智力&#xff0c;还能让人回味无穷。今天&#xff0c;我带领大家将一起学习如何使用 HTML5 Canv…...

macos arm 本地/docker/本地k8s 安装jupyterhub 并登陆

概述 很多文章写的启动官方docker镜像后,新建linux用户即可直接登录,不知道是否版本原因,总之目前最新版我亲测不可以,踩坑两天,这里记录下解决过程,以及各种细节在文档中的位置.以及为什么官方镜像不能直接使用的原因. part1 本地安装jupyterhub https://jupyterhub.readth…...

go采集注册表

package mainimport ("fmt""golang.org/x/sys/windows/registry""log""os""strconv""strings" )func USBSTOR_Enum() {// 打开注册表键keyPath : SYSTEM\CurrentControlSet\Services\USBSTOR\Enumk, err : regist…...

Java连接TDengine和MySQL双数据源

git文件地址&#xff1a;项目首页 - SpringBoot连接TDengine和MySQL双数据源:SpringBoot连接TDengine和MySQL双数据源 - GitCode 1、yml配置 spring:datasource:druid:mysql:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/testusername: roo…...

配置AOSP下载环境

1#curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 2#repo init -u https://android.googlesource.com/platform/manifest 3#清华镜像站帮助页 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 4#同步安卓AOSP 这里是安卓13 repo init -u htt…...

SpringBoot源码解析(七):应用上下文结构体系

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…...

5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署

想象一下&#xff0c;只需简单几步操作&#xff0c;就能生成逼真的语音效果&#xff0c;无论是为客户服务还是为游戏角色配音&#xff0c;都能轻松实现。GPT-Sovits 模型&#xff0c;其高效的语音生成能力为实现自然、流畅的语音交互提供了强有力的技术支持。本文将详细介绍如何…...

数字化时代,传统代理模式的变革之路

在数字化飞速发展的今天&#xff0c;线上线下融合&#xff08;O2O&#xff09;成了商业领域的大趋势。这股潮流&#xff0c;正猛烈冲击着传统代理模式&#xff0c;给它带来了新的改变。 咱们先看看线上线下融合现在啥情况。线上渠道那是越来越多&#xff0c;企业纷纷在电商平台…...

python爬虫爬取淘宝商品比价||淘宝商品详情API接口

最近在学习北京理工大学的爬虫课程&#xff0c;其中一个实例是讲如何爬取淘宝商品信息&#xff0c;现整理如下&#xff1a; 功能描述&#xff1a;获取淘宝搜索页面的信息&#xff0c;提取其中的商品名称和价格 探讨&#xff1a;淘宝的搜索接口 翻页的处理 技术路线:requests…...

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置&#xff08;batch size 1&#xff09;&#xff1a; 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…...

CSRF攻击XSS攻击

概述 ​在 HTML 中&#xff0c;<a>, <form>, <img>, <script>, <iframe>, <link> 等标签以及 Ajax 都可以指向一个资源地址&#xff0c;而所谓的跨域请求就是指&#xff1a;当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指…...

vue3学习日记8 - 一级分类

最近发现职场前端用的框架大多为vue&#xff0c;所以最近也跟着黑马程序员vue3的课程进行学习&#xff0c;以下是我的学习记录 视频网址&#xff1a; Day2-17.Layout-Pinia优化重复请求_哔哩哔哩_bilibili 学习日记&#xff1a; vue3学习日记1 - 环境搭建-CSDN博客 vue3学…...

Notepad++移除所有空格

1.打开Notepad。 2.打开你想要编辑的文件。 3.按下 Ctrl H 打开查找和替换对话框&#xff0c;并选择 “正则表达式”。 4.在 “查找目标” 框中输入 \s。 5.在 “替换为” 框中留空&#xff0c;不填写任何内容。 6.点击 “全部替换” 按钮。...

JavaSE第八天

一、继承之super关键字 super关键字&#xff1a; 一个引用变量&#xff0c;用于引用父类对象 父类和子类都具有相同的命名方法&#xff0c;要调用父类方法时使用 父类和子类都具有相同的命名属性&#xff0c;要调用父类中的属性时使用 super也是父类的构造函数&#xff0c;…...

ideal jdk报错如何解决

例如: 可能一:环境变量中未配置 请在Path中加入并将要使用的最好置顶,如 可能二:项目结构中语言级别错误: 可能三:Maven工程中,对于模块要单独设置jdk: 如: 未设置则为默认,在博主本次展示中为:...

嵌入式Linux ntpclient的使用

ntpclient是一个用于与NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;服务器通信并测量系统时间的工具。我这里用的是"ntpclient_2024_132"。下载源码编译后会得到一个ntpclient程序。 下面是对ntpclient每个选项的解释&#xff1a; -…...

25/1/15 嵌入式笔记 初学STM32F108

GPIO初始化函数 GPIO_Ini&#xff1a;初始化GPIO引脚的模式&#xff0c;速度和引脚号 GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的引脚0 GPIO输出控制函数 GPIO_SetBits&#xff1a;将指定的GPIO引脚设置为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将GPIO…...

【练习】力扣热题100 字符串解码

题目 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没有额外的空格&#xff0c…...

1.快慢指针-力扣-283-移动零

题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 用例 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nu…...

5. 使用springboot做一个音乐播放器软件项目【业务逻辑开发】

#万物oop 上一章文章 我们做了音乐播放器 数据表的创建。参加地址&#xff1a; https://blog.csdn.net/Drug_/article/details/145093705 今天分享的这篇文章就是根据数据表 来写 业务逻辑 。 今天我们主要是实现管理后台的功能。 对于这篇文章 的理解 需要小伙伴有 springbo…...

配置正确spring-boot工程启动的时候报错dynamic-datasource Please check the setting of primary

一个两年没有碰的spring-boot工程&#xff0c;启动时报错。因为用了baomidou的多源数据库配置&#xff0c;因此启动时报错primary没有正确配置。经过检查&#xff0c;确定配置文件配置正确。 报错原因是没有读到正确的配置文件。pom文件里的resources标签重定义&#xff0c;把…...

Freeswitch使用media_bug能力实现回铃音检测

利用freeswitch的media bug能力来在智能外呼时通过websocket对接智能中心的声音检测接口&#xff0c;来实现回铃音检测&#xff0c;来判断用户当前是否已响应&#xff0c;拒接&#xff0c;关机等。 1.回铃音处理流程 2.模块源码目录结构 首先新建一个freeswitch的源码的src/a…...

Kubernetes(k8s)和Docker Compose本质区别

Kubernetes&#xff08;简称 k8s&#xff09;和 Docker Compose 是容器编排领域的两大重要工具&#xff0c;虽然它们都用于管理和编排容器化应用&#xff0c;但在设计目标、功能特性、使用场景和复杂度上存在显著差异。以下将从多个方面详细探讨 Kubernetes 和 Docker Compose …...

OSI七层协议——分层网络协议

OSI七层协议&#xff0c;顾名思义&#xff0c;分为七层&#xff0c;实际上七层是不存在的&#xff0c;是人为的进行划分,让人更好的理解 七层协议包括&#xff0c;物理层(我),数据链路层(据),网络层(网),传输层(传输),会话层(会),表示层(表),应用层(用)(记忆口诀->我会用表…...

RabbitMQ 客户端 连接、发送、接收处理消息

RabbitMQ 客户端 连接、发送、接收处理消息 一. RabbitMQ 的机制跟 Tcp、Udp、Http 这种还不太一样 RabbitMQ 服务&#xff0c;不是像其他服务器一样&#xff0c;负责逻辑处理&#xff0c;然后转发给客户端 而是所有客户端想要向 RabbitMQ服务发送消息&#xff0c; 第一步&a…...