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

【MySQL联合查询】轻松实现数据关联

1、联合查询

联合查询又称为多表查询,它的基本执行过程就是笛卡尔积

1.1 认识笛卡尔积

那么什么是笛卡尔积呢?

答:笛卡尔积就是将两张表放在一起进行计算,把第一张表的每一行分别取出来和第二张表的每一行进行连接,得到一个新的行。

举例说明笛卡尔积:

假设我们现在有两张表分别为学生信息表和班级信息表

现在我们把这两张表进行笛卡尔积操作:

笛卡尔积相当于乘法运算,列数是两个表列数之和,行数是两个表行数之积

注:笛卡尔积执行后产生的结果大多是无效的,此时我们就可以采用条件进行筛选

1.2 笛卡尔积进行多表查询

接下来我们就来试一下如何进行笛卡尔积操作:

首先创建两张表,分别为上述的学生信息表和班级信息表,创建完两张表后并给它们添加上述表中的内容

select * from student;
+----+------+---------+
| id | name | classid |
+----+------+---------+
|  1 | 张三 |       1 |
|  2 | 李四 |       2 |
|  3 | 王五 |       1 |
+----+------+---------+
select * from class;
+---------+-----------+
| classid | classname |
+---------+-----------+
|       1 | 舞蹈班    |
|       2 | 跆拳道班  |
+---------+-----------+

然后对这两张表进行笛卡尔积操作

select * from student,class;
+----+------+---------+---------+-----------+
| id | name | classid | classid | classname |
+----+------+---------+---------+-----------+
|  1 | 张三 |       1 |       1 | 舞蹈班    |
|  1 | 张三 |       1 |       2 | 跆拳道班  |
|  2 | 李四 |       2 |       1 | 舞蹈班    |
|  2 | 李四 |       2 |       2 | 跆拳道班  |
|  3 | 王五 |       1 |       1 | 舞蹈班    |
|  3 | 王五 |       1 |       2 | 跆拳道班  |
+----+------+---------+---------+-----------+

上述的笛卡尔积执行后产生的结果大多数是无效的,此时我们就可以采用条件进行筛选

当 student 表中的 classid 和 class 表中的 classid 相等时,则这条数据是有效的数据

select * from student,class where classid = classid;
ERROR 1052 (23000): Column 'classid' in where clause is ambiguous

如果直接用 classid = classid 则会报错,因为它无法分辨哪个classid 和 哪个 classid 进行比较

select * from student,class where student.classid = class.classid;
+----+------+---------+---------+-----------+
| id | name | classid | classid | classname |
+----+------+---------+---------+-----------+
|  1 | 张三 |       1 |       1 | 舞蹈班    |
|  2 | 李四 |       2 |       2 | 跆拳道班  |
|  3 | 王五 |       1 |       1 | 舞蹈班    |
+----+------+---------+---------+-----------+

那么此时就可以采用 表名.列名 的方式进行区分

注:多表查询除了可以加上连接条件外,还可以加上其他条件

多表查询出来用 from 多个表加逗号分隔 来连接多个表外,还可以用 join on 来连接,还可以是 inner join on

join on 实现多表查询:

select * from student join class on student.classid = class.classid;
+----+------+---------+---------+-----------+
| id | name | classid | classid | classname |
+----+------+---------+---------+-----------+
|  1 | 张三 |       1 |       1 | 舞蹈班    |
|  2 | 李四 |       2 |       2 | 跆拳道班  |
|  3 | 王五 |       1 |       1 | 舞蹈班    |
+----+------+---------+---------+-----------+

join 连接的是两个表,on 后面跟的是连接条件

inner join on 实现多表查询:

select * from student inner join class on student.classid = class.classid;
+----+------+---------+---------+-----------+
| id | name | classid | classid | classname |
+----+------+---------+---------+-----------+
|  1 | 张三 |       1 |       1 | 舞蹈班    |
|  2 | 李四 |       2 |       2 | 跆拳道班  |
|  3 | 王五 |       1 |       1 | 舞蹈班    |
+----+------+---------+---------+-----------+

inner join on 其实跟 join on 一样,此处不做过多解释

from 多个表 和 join on 的主要区别:

  • from 多个表只能实现内连接

  • join on 既可以实现内连接也可以实现外连接

1.3 内连接和外连接

内连接 和 外连接的主要区别:

  • 当连接的两个表里面的数据是一一对应的时候,内连接和外连接其实就没啥区别

  • 当连接的两个表里面的数据不是一一对应的时候,内连接和外连接就有区别了

1.3.1 两张表一一对应

现在有两张表,分别为 student 学生表 和 score 成绩表:

select * from student;
+----+------+
| id | name |
+----+------+
|  1 | 张三 |
|  2 | 李四 |
|  3 | 王五 |
+----+------+
select * from scoretable;
+-----------+-------+
| studentId | score |
+-----------+-------+
|         1 |    97 |
|         2 |    86 |
|         3 |    73 |
+-----------+-------+

id 和 studentId 是一一对应的,所有内连接和外连接没什么区别

内连接:

select * from student,scoreTable where student.id = scoretable.studentId;
+----+------+-----------+-------+
| id | name | studentId | score |
+----+------+-----------+-------+
|  1 | 张三 |         1 |    97 |
|  2 | 李四 |         2 |    86 |
|  3 | 王五 |         3 |    73 |
+----+------+-----------+-------+

外连接:

select * from student join scoreTable on student.id = scoretable.studentId;
+----+------+-----------+-------+
| id | name | studentId | score |
+----+------+-----------+-------+
|  1 | 张三 |         1 |    97 |
|  2 | 李四 |         2 |    86 |
|  3 | 王五 |         3 |    73 |
+----+------+-----------+-------+

1.3.2 两张表不一一对应

现在有两张表,分别为 student 学生表 和 score 成绩表:

select * from student;
+----+------+
| id | name |
+----+------+
|  1 | 张三 |
|  2 | 李四 |
|  3 | 王五 |
+----+------+
select * from scoretable;
+-----------+-------+
| studentId | score |
+-----------+-------+
|         1 |    97 |
|         2 |    86 |
|         6 |    73 |
+-----------+-------+

现在我们可以看到 student 中的 id 为 3 的在 scoretable 中没有对应的 studentId

内连接:

select * from student,scoreTable where student.id = scoretable.studentId;
+----+------+-----------+-------+
| id | name | studentId | score |
+----+------+-----------+-------+
|  1 | 张三 |         1 |    97 |
|  2 | 李四 |         2 |    86 |
+----+------+-----------+-------+

当进行内连接的时候因为student中的id为3 的和scoretable中的studentId为6的不匹配所以就被筛除了没有查询出来

外连接:

当两张表不是一一对应的时候,外连接又可以分为 左外连接右外连接

  • 左外连接:left join on

select * from student left join scoreTable on student.id = scoretable.studentId;
+----+------+-----------+-------+
| id | name | studentId | score |
+----+------+-----------+-------+
|  1 | 张三 |         1 |    97 |
|  2 | 李四 |         2 |    86 |
|  3 | 王五 |      NULL |  NULL |
+----+------+-----------+-------+

左外连接会把左表的结果尽量显示出来,如果右表中没有对应的记录,就使用NULL填充

  • 右外连接:right join on

select * from student right join scoreTable on student.id = scoretable.studentId;
+------+------+-----------+-------+
| id   | name | studentId | score |
+------+------+-----------+-------+
|    1 | 张三 |         1 |    97 |
|    2 | 李四 |         2 |    86 |
| NULL | NULL |         6 |    73 |
+------+------+-----------+-------+

右外连接会把右表的结果尽量显示出来,如果左表中没有对应的记录,就使用NULL填充

1.4 自连接

自连接:自己和自己进行笛卡尔积

自连接使用场景:当行与行进行比较时,就可以使用自连接,将行转成列进行比较

现在有两张表,分别为 scoretable 和 course

scoretable 表:

select * from scoretable;
+-------+------------+-----------+
| score | student_id | course_id |
+-------+------------+-----------+
|    70 |          1 |         1 |
|    96 |          1 |         2 |
|    97 |          1 |         3 |
|    80 |          2 |         1 |
|    92 |          2 |         2 |
|    86 |          2 |         3 |
|    91 |          3 |         1 |
|    76 |          3 |         2 |
|    77 |          3 |         3 |
+-------+------------+-----------+

course 表:

select * from course;
+----+------+
| id | name |
+----+------+
|  1 | 语文 |
|  2 | 数学 |
|  3 | 英语 |
+----+------+

现在我们要查询哪些同学的语文成绩比英语成绩低

首先自连接,将行转换成列:

select * from scoretable,scoretable;
ERROR 1066 (42000): Not unique table/alias: 'scoretable'

自己跟自己连接名字不能重复

那表名不能重复,那还如何自连接呢?

答:可以起别名,起别名不光可以对列,还可以对表

select * from scoretable as s1,scoretable as s2;

自连接排列组合的时候会产生大量无效的数据,所有就需要指定连接条件

指定连接条件,将有效数据筛选出来:

select * from scoretable as s1,scoretable as s2 
where s1.student_id = s2.student_id;

自连接的时候只有当 student_id 相等时才表示有效数据

添加条件,将左边表的语文成绩和右边表的英语成绩查询出来:

有效成绩查询出来后,就需要加上条件查询出左边的语文成绩和右边的英语成绩

select * from scoretable as s1,scoretable as s2 
where s1.student_id = s2.student_id 
and s1.course_id = 1 and s2.course_id = 3;
+-------+------------+-----------+-------+------------+-----------+
| score | student_id | course_id | score | student_id | course_id |
+-------+------------+-----------+-------+------------+-----------+
|    70 |          1 |         1 |    97 |          1 |         3 |
|    80 |          2 |         1 |    86 |          2 |         3 |
|    91 |          3 |         1 |    77 |          3 |         3 |
+-------+------------+-----------+-------+------------+-----------+

这样就将左侧的语文成绩查询出来了,右侧的英语成绩查询出来了

添加条件,将语文成绩比英语成绩低的同学查询出来:

接下来就要查询哪些同学的语文成绩比英语成绩低

select * from scoretable as s1,scoretable as s2 
where s1.student_id = s2.student_id 
and s1.course_id = 1 and s2.course_id = 3 and s1.score < s2.score;
+-------+------------+-----------+-------+------------+-----------+
| score | student_id | course_id | score | student_id | course_id |
+-------+------------+-----------+-------+------------+-----------+
|    70 |          1 |         1 |    97 |          1 |         3 |
|    80 |          2 |         1 |    86 |          2 |         3 |
+-------+------------+-----------+-------+------------+-----------+
2 rows in set (0.00 sec)

这样就把语文成绩比英语成绩低的学生信息查询出来了

1.5 子查询

子查询:把多个 SQL 组合成一个

在实际开发中,子查询得慎用。因为子查询可能会构造出非常复杂,非常不好理解的 SQL。

写代码一般要么追求可读性和可维护性,要么追求程序的运行速度

1.5.1 单行子查询

单行子查询:返回一行记录的子查询

student 表:

select * from student;
+----+----------+------+
| id | class_id | name |
+----+----------+------+
|  1 |        1 | 张三 |
|  2 |        1 | 李四 |
|  3 |        2 | 王五 |
|  4 |        3 | 赵六 |
|  5 |        2 | 王七 |
+----+----------+------+

现在查询“张三”的同班同学,根据 class_id 进行查询

分开查询:

//查询出张三的class_id
select class_id from student where name = '张三';
+----------+
| class_id |
+----------+
|        1 |
+----------+
//查询出来的张三的class_id为 1,再查询除了张三以外的class_id 为1的同学
select * from student where class_id = 1 and name != '张三';
+----+----------+------+
| id | class_id | name |
+----+----------+------+
|  2 |        1 | 李四 |
+----+----------+------+

单行子查询:

select * from student where 
class_id = ( select class_id from student where name = '张三') 
and name != '张三';
+----+----------+------+
| id | class_id | name |
+----+----------+------+
|  2 |        1 | 李四 |
+----+----------+------+

1.5.2 多行子查询

多行子查询:返回多行记录的子查询

scoretable 表:

select * from scoretable;
+-------+------------+-----------+
| score | student_id | course_id |
+-------+------------+-----------+
|    70 |          1 |         1 |
|    96 |          1 |         2 |
|    97 |          1 |         3 |
|    80 |          2 |         1 |
|    92 |          2 |         2 |
|    86 |          2 |         3 |
|    91 |          3 |         1 |
|    76 |          3 |         2 |
|    77 |          3 |         3 |
+-------+------------+-----------+

course 表:

select * from course;
+----+------+
| id | name |
+----+------+
|  1 | 语文 |
|  2 | 数学 |
|  3 | 英语 |
+----+------+

查询每位同学的“语文”“英语”课程的成绩信息

普通查询:

//首先查询出语文和英语成绩对应的id
select id from course where name = '语文' or name = '英语';
+----+
| id |
+----+
|  1 |
|  3 |
+----+
//再根据查询出来的语文英语对应的id,在 scoretable表中查询
select * from scoretable where course_id = 1 or course_id = 3;
+-------+------------+-----------+
| score | student_id | course_id |
+-------+------------+-----------+
|    70 |          1 |         1 |
|    97 |          1 |         3 |
|    80 |          2 |         1 |
|    86 |          2 |         3 |
|    91 |          3 |         1 |
|    77 |          3 |         3 |
+-------+------------+-----------+

多行子查询:

select * from scoretable where course_id 
in(select id from course where name = '语文' or name = '英语');
+-------+------------+-----------+
| score | student_id | course_id |
+-------+------------+-----------+
|    70 |          1 |         1 |
|    97 |          1 |         3 |
|    80 |          2 |         1 |
|    86 |          2 |         3 |
|    91 |          3 |         1 |
|    77 |          3 |         3 |
+-------+------------+-----------+

1.5.3 合并查询

合并查询:就是将两个查询结果集,合并成一个

在实际应用中,为了合并多个查询的执行结果,可以使用集合操作符 union,union all。使用UNION 和UNION ALL时,前后查询的结果集中,字段需要一致

  • union操作符

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

course 表:

select * from course;
+----+------+
| id | name |
+----+------+
|  1 | 语文 |
|  2 | 数学 |
|  3 | 英语 |
|  6 | 化学 |
|  7 | 物理 |
+----+------+

现在查询 id 小于等于 2 或者 name 为 "英文" 的课程信息

select * from course where id <= 2 union select * from course where name = '英语';
+----+------+
| id | name |
+----+------+
|  1 | 语文 |
|  2 | 数学 |
|  3 | 英语 |
+----+------+

看到这里大家可能有个疑问,明明可以用 or 也能实现,为什么还要用 union?

答:用 or 查询只能时来自于同一个表,如果用 union 查询可以时来自于不同的表,子要查询的结果列匹配即可,匹配就是列的类型一样、列的一样、列的名字一样

  • union all 操作符

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

select * from course where id < 3 union all select * from course where name = '数学';
+----+------+
| id | name |
+----+------+
|  1 | 语文 |
|  2 | 数学 |
|  2 | 数学 |
+----+------+

相关文章:

【MySQL联合查询】轻松实现数据关联

1、联合查询 联合查询又称为多表查询&#xff0c;它的基本执行过程就是笛卡尔积 1.1 认识笛卡尔积 那么什么是笛卡尔积呢&#xff1f; 答&#xff1a;笛卡尔积就是将两张表放在一起进行计算&#xff0c;把第一张表的每一行分别取出来和第二张表的每一行进行连接&#xff0c;得到…...

Windows安装Ubuntu双系统

Windows安装Ubuntu双系统 1.下载Ubuntu 16.04&#xff0c;地址https://releases.ubuntu.com/16.04/ 2.下载Rufus&#xff0c;地址https://rufus.ie/zh/ 3.准备U盘&#xff0c;烧录系统 4.磁盘分区 5.重启&#xff0c;按住shift键 本人电脑是联想小新 Windows11系统&#xff0…...

【大数据之Hadoop】三十四、Hadoop综合调优之小文件优化方法

1 Hadoop小文件弊端 HDFS上每个文件都要在NameNode上创建对应的元数据&#xff0c;这个元数据的大小约为150byte&#xff0c;这样当小文件比较多的时候&#xff0c;就会产生很多的元数据文件&#xff0c;一方面会大量占用NameNode的内存空间&#xff0c;另一方面就是元数据文件…...

周赛 Round#3 题解

又不能放图片&#xff0c;又不能写学校&#xff0c;你让我怎么办啊&#xff01;&#xff01; 系列文章目录 1.周赛 Round#1 2.周赛 Round#2 前言 这是周赛第三轮。//涉及隐私原因&#xff0c;博文里不放题目&#xff0c;要看的去http://0241:101:610:801.22222 划分字符串贪…...

详解HTTPS加密过程

目录 前言 HTTPS是什么 HTTPS的工作过程 引入对称加密 引入非对称加密 引入证书 总结 前言 对于HTTP上篇文章已经做了详细的解释了。众所周知&#xff0c;HTTPS要比HTTP要安全&#xff0c;但是为什么HTTPS要比HTTP安全呢&#xff1f; 这篇文章主要研究HTTPS的加密机制…...

聚观早报 | ChatGPT登顶美区iOS免费榜;库克不满苹果首款MR设备

今日要闻&#xff1a;ChatGPT登顶美区iOS免费榜&#xff1b;库克不满苹果首款MR设备&#xff1b;索尼正开发小尺寸折叠屏手机&#xff1b;万达辟谣大规模裁员&#xff1b;智能仿生手让截肢者重获手心的温度 ChatGPT登顶美区iOS免费榜 ChatGPT 在 iOS 美区免费 App 排行榜上位列…...

position:sticky-粘性吸附布局

一、描述 就是在一个滚动的容器里,将一个子元素设置为postion:sticky 在元素显示在可视区域内,显示的效果与position:relative 一致&#xff0c;当元素被滑动出可视区域外是,显示效果与position:fixed一致 二、注意事项 1、父元素需要存在滚动&#xff08;overflow:auto&…...

【MySQL】-【数据库的设计规范】

文章目录 为什么需要数据库设计范式范式简介范式都包括哪些键和相关属性的概念第一范式(1st NF)第二范式(2nd NF)第三范式(3rd NF) 反范式化概述应用举例反范式化的新问题反范式的适用场景 BCNF(巴斯范式)案例案例一案例二 第四范式案例案例一案例二 第五范式、域键范式范式的实…...

全面解析缓存应用经典问题

1、前言 随着互联网从简单的单向浏览请求&#xff0c;发展为基于用户个性信息的定制化以及社交化的请求&#xff0c;这要求产品需要做到以用户和关系为基础&#xff0c;对海量数据进行分析和计算。对于后端服务来说&#xff0c;意味着用户的每次请求都需要查询用户的个人信息和…...

Java版本企业电子招采系统源码——信息数智化招采系统

信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、Stre…...

Rust每日一练(Leetday0005) 罗马数字、公共前缀、三数之和

目录 13. 罗马数字转整数 Roman to Integer &#x1f31f; 14. 最长公共前缀 Longest Common Prefix &#x1f31f; 15. 三数之和 3Sum &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日…...

【告别校园,迎接未来】

作为一个曾经的大学生&#xff0c;我的四年大学时光充满了起伏和挑战。回顾这段时光&#xff0c;我深刻认识到了自己的不足&#xff0c;同时也感悟了一些珍贵的人生经验和收获。 我是一个比较内向的人&#xff0c;进入大学后感觉有些孤独&#xff0c;难以适应新的环境和生活方…...

SaaS系统用户权限设计

SaaS系统用户权限设计 学习目标&#xff1a; 理解RBAC模型的基本概念及设计思路 了解SAAS-HRM中权限控制的需求及表结构分析完成组织机构的基本CRUD操作 完成用户管理的基本CRUD操作完成角色管理的基本CRUD操作 组织机构管理 需求分析 需求分析 实现企业组织结构管理&#xff0…...

我们为什么还要学习Altium Designer?

Altium Designe&#xff08;简称“AD”&#xff09;是电子设计领域中备受推崇的软件工具之一&#xff0c;拥有强大的功能和灵活的设计环境&#xff0c;也是要用最广泛的EDA工具之一&#xff0c;为电子工程师提供了无限可能&#xff0c;但很多工程师学完AD基本操作就转投其他EDA…...

Q1业绩整体回暖,影视行业找到增长新路径

凛冬已过&#xff0c;影视行业恢复了生机。 数据显示&#xff0c;今年一季度&#xff0c;影视院线板块全部上市公司分别实现营收、归母净利111.86亿元、10.15亿元&#xff0c;同比增幅为1.44%和53.76%。在经济复苏的背景下&#xff0c;影视行业实现了扭亏为盈和跨越式增长。 …...

Zabbix

概述 作为一个运维&#xff0c;需要会使用监控系统查看服务器系统性能、应用服务状态和网站流量指标等&#xff0c;利用监控系统的数据去了解网站上线发布的结果和健康状态。 利用一个优秀的监控软件&#xff0c;我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器…...

OpenHarmony支持HDMI接口声卡适配说明

高清多媒体接口&#xff08;High Definition Multimedia Interface&#xff0c;HDMI &#xff09;是一种全数字化视频和声音发送接口&#xff0c;可以发送未压缩的音频及视频信号。HDMI可用于机顶盒、DVD播放机、个人计算机、电视、游戏主机、综合扩大机、数字音响与电视机等设…...

AtCoder Beginner Contest 300G - P-smooth number解题报告

AtCoder Beginner Contest 300G - P-smooth number解题报告 1 题目链接 传送门 2 题目大意 题目&#xff1a;P-光滑数的数量 题目大意&#xff1a; 在 1 1 1 到 n n n 中&#xff0c;有多少个数的所有质因数均不超过 p ( p ≤ 100 ) p\ (p\leq100) p (p≤100)。 3 解…...

数据分析与预处理常用的图和代码

1.训练集和测试集统计数据描述之间的差异作图&#xff1a; def diff_color(x):color red if x<0 else (green if x > 0 else black)return fcolor: {color}(train.describe() - test.describe())[features].T.iloc[:,1:].style\.bar(subset[mean, std], alignmid, colo…...

Http与Https 比较

目录 1、HTTP&#xff08;HyperText Transfer Protocol&#xff1a;超文本传输协议&#xff09; 2、HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff1a;超文本传输安全协议&#xff09; 3、HTTP 与 HTTPS 区别 4、HTTPS 的工作原理 1、HTTP&#xff08;HyperTex…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...