MySQL中的嵌套查询
1. 嵌套查询的定义
嵌套查询指在一个查询语句的某个部分嵌入一个子查询。
嵌套查询的执行过程遵循“先子查询、后外层查询”的逻辑。首先,子查询执行并返回一个结果集,可能是一个值、一行或多行数据。接着,外层查询使用子查询的结果继续对数据进行筛选或处理。通过这种方式,嵌套查询可以处理更复杂的逻辑,如多层条件过滤、数据对比等。
- 子查询:首先执行,返回符合条件的结果。
- 外层查询:利用子查询返回的结果进行筛选或其他逻辑操作,最终返回结果。
2. 嵌套查询的语法
2.1 嵌套查询的基本结构
SELECT 列名
FROM 表名
WHERE 列名 比较运算符 (子查询);
先通过子查询返回结果,然后再通过比较运算符判断子查询返回的结果是否满足条件,满足条件的字段的记录,就会展示该记录被SELECT的字段。
示例
SELECT column_name1
FROM table_name1
WHERE column_name2 比较运算符 (SELECT column_name3 FROM table_name2 WHERE condition);
- 比较运算符之后的 “(SELECT column_name3 FROM table_name2 WHERE condition)” 是作为子查询,执行SQL语句时,会先选出表table_name2中符合条件condition的记录的column_name3字段给外层查询。
- 当得到了子查询返回的column_name3字段,外层查询会先将表table_name1的所有记录的column_name2字段 通过比较运算符与这些返回的column_name3字段进行比较。
- 对于满足了比较运算符规则的column_name2字段的记录,会返回这些记录的column_name1字段。
2.2 常见的比较运算符
=
:用于检查外层查询的某个列的值是否等于子查询返回的值。>
、<
、>=
、<=
:用于比较外层查询的列值与子查询结果之间的大小关系。IN
:用于检查外层查询的某个列值是否在子查询返回的一组结果中。ANY
/SOME
:用于检查外层查询的列值是否满足子查询返回结果中的任意一个值的条件。ALL
:用于检查外层查询的列值是否满足子查询返回结果中的所有值的条件。
注意:
ANY
/SOME和ALL
一般要结合>
、<
、>=
、<=来使用
4. ANY
/ SOME
运算符
SELECT name
FROM employees
WHERE salary > ANY (SELECT salary FROM employees WHERE department_id = 1);
- 外层查询筛选出那些薪水大于部门 1 中任意一个员工薪水的员工。
- 只要大于部门1中薪水最低的员工就符合条件。
5. ALL
运算符
SELECT name
FROM employees
WHERE salary > ALL (SELECT salary FROM employees WHERE department_id = 1);
- 外层查询筛选出那些薪水大于部门 1 中所有员工薪水的员工。
- 必须大于部门1中薪水最高的员工才能符合条件。
3. 基于子查询行为的分类
- 依据:这一分类基于子查询的返回结果形式以及子查询与外层查询之间的依赖关系。
- 重点:这一分类更关注子查询本身的性质,即子查询是返回多少数据(单行或多行、多列)、是否依赖于外层查询,以及子查询的执行方式是一次性还是每行重新执行。
3.1 单行子查询
- 定义:单行子查询是指子查询返回一个字段的一个值。这个值可以是一个具体的数字、日期、文本等。子查询只返回一个结果,外层查询会使用这个结果进行比较、筛选或计算。
- 特点:子查询返回的是一个字段的单一值。外层查询使用这个值来进行条件判断或筛选。
- 应用场景:当需要从子查询中获取一个具体的值(如最大值、最小值、平均值等),然后外层查询使用这个值进行比较。
语法结构:
SELECT 列名
FROM 表名
WHERE 列名 比较运算符 (子查询);
示例:
SELECT 姓名, 工资
FROM 员工
WHERE 工资 = (SELECT MAX(工资) FROM 员工);
解释:
- 子查询
(SELECT MAX(工资) FROM 员工)
返回员工表中的最高工资。 - 外层查询根据这个最高工资筛选出符合条件的员工(即工资等于最高工资的员工)。
3.2 多行子查询
- 定义:多行子查询是指子查询返回一个或多个字段的一个或多个值。外层查询通过集合运算符(如
IN
、ANY
、ALL
等)来将外层查询的字段与子查询返回的多个结果进行比较和匹配。 - 特点:子查询返回的是一组值(可以是一个或多个字段),外层查询使用这些值进行筛选或比较。
- 应用场景:当子查询返回多个值时,外层查询通过集合运算符与这些结果进行匹配。例如,查找某个字段的值是否存在于一组返回值中。
语法结构:
SELECT 列名
FROM 表名
WHERE 列名 IN (子查询);
示例:
SELECT 姓名
FROM 员工
WHERE 部门编号 IN (SELECT 部门编号 FROM 部门 WHERE 城市 = '上海');
解释:
- 子查询
(SELECT 部门编号 FROM 部门 WHERE 城市 = '上海')
返回所有位于上海的部门编号,这是一组值。 - 外层查询使用子查询返回的这些部门编号来筛选出属于这些部门的员工。
3.3 相关子查询
- 定义:相关子查询是指子查询依赖于外层查询的每一条记录,因此每次外层查询处理新的一条记录时,子查询都会重新执行一次,并根据当前这条记录中的数据计算出结果。这意味着子查询会根据外层查询的变化动态地生成结果。
- 特点:每当外层查询处理一条新记录时,相关子查询就会根据这条记录的值重新执行,并返回新的结果。子查询的结果因外层查询的记录而动态变化。
- 应用场景:当子查询的结果依赖于外层查询当前正在处理的记录时使用。例如,针对每条记录计算与其相关的数据或值。
语法结构:
SELECT 列名
FROM 表名 AS 外层表
WHERE 列名 比较运算符 (SELECT 列名 FROM 子查询表 WHERE 子查询表.列名 = 外层表.列名);
示例:
SELECT 房屋编号, 价格
FROM 房屋 AS 可买房屋
WHERE 价格 > (SELECT AVG(价格) FROM 房屋 AS 出售房屋 WHERE 出售房屋.城市 = 可买房屋.城市);
解释:
外层查询:
SELECT 房屋编号, 价格 FROM 房屋 AS 可买房屋
:
外层查询从房屋
表中检索每个房屋的编号和价格,并将房屋
表赋予别名可买房屋
。这个别名的作用是帮助区分外层查询和子查询中的相同表名,以便进行比较。这一步的目的是从所有房屋中找到符合特定条件的房屋。
子查询:
-
(SELECT AVG(价格) FROM 房屋 AS 出售房屋 WHERE 出售房屋.城市 = 可买房屋.城市)
:
子查询的任务是计算当前房屋所在城市的平均房价。子查询也使用了房屋
表,但被赋予了别名出售房屋
,用于避免与外层查询中的可买房屋
混淆。子查询的WHERE
子句指定了只有那些与当前外层查询的房屋处于相同城市的房屋记录才会参与平均价格的计算。-
执行过程:每次外层查询处理一条新的房屋记录时,子查询都会根据这条房屋记录的城市,动态地计算该城市中所有房屋的平均价格。也就是说,子查询依赖于外层查询中的房屋城市信息。因此,当外层查询遍历到某个房屋时,子查询会执行一次,计算出这个房屋所在城市的平均房价。
-
结果作用:子查询返回的是该城市的平均房价。这个值会用于外层查询的
WHERE
子句中,帮助判断当前房屋的价格是否高于其所在城市的平均房价。
-
整体逻辑:
-
子查询的动态执行:对于每一条外层查询的记录(即每一个房屋),子查询都会基于该房屋的城市重新计算城市的平均房价。比如,当外层查询正在处理北京的某个房屋时,子查询会检索所有位于北京的房屋,并计算这些房屋的平均价格。
-
条件比较:外层查询的
WHERE
子句会将当前房屋的价格与子查询返回的城市平均房价进行比较。如果当前房屋的价格高于该城市的平均房价,则该房屋的编号和价格会被返回。
3.4 非相关子查询
- 定义:非相关子查询是指子查询与外层查询没有直接的依赖关系。子查询独立执行一次,返回一个结果,然后外层查询无论处理多少条记录,都只会与这个结果进行比较。
- 特点:子查询在外层查询之前独立执行一次,返回一个固定值。这个值用于外层查询的每一条记录中进行比较或筛选。
- 应用场景:当子查询的结果与外层查询无关时使用,例如在查询中用到的某个全局值或固定结果。
语法结构:
SELECT 列名
FROM 表名
WHERE 列名 = (子查询);
示例:
SELECT 姓名
FROM 员工
WHERE 部门编号 = (SELECT 部门编号 FROM 部门 WHERE 部门名称 = '市场部');
解释:
- 子查询
(SELECT 部门编号 FROM 部门 WHERE 部门名称 = '市场部')
独立执行一次,返回市场部的部门编号。 - 外层查询不论处理多少条员工记录,都始终与市场部的编号进行比较。
3.5 总结
- 单行子查询:返回一个字段的一个值,外层查询与该值进行比较或筛选。
- 多行子查询:返回一个或多个字段的多个值,外层查询使用集合运算符与这些值进行匹配。
- 相关子查询:每次外层查询处理新记录时,子查询都会根据该记录的值重新执行,生成新的结果。
- 非相关子查询:子查询只执行一次,返回固定的结果,外层查询无论处理多少条记录,都与该固定结果进行比较。
4. 基于子查询位置的分类
- 依据:这一分类基于子查询在 SQL 语句中所处的位置,即子查询是出现在
WHERE
、FROM
、SELECT
还是HAVING
子句中。 - 重点:这一分类关注子查询在外层查询中的用途和功能,即子查询如何与外层查询结合以实现具体的数据处理。
4.1 WHERE 子句中的嵌套查询
语法:
SELECT 列名
FROM 表名
WHERE 列名 比较运算符 (子查询);
使用场景:
- WHERE 子句中的嵌套查询常用于条件过滤。通常,嵌套查询返回一个单一值或一组值,然后在外部查询的 WHERE 子句中用作过滤条件。
- 例如:筛选出满足某些特定条件的记录,如选取工资最高的员工或获取某个特定状态的客户。
示例:
SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id = (SELECT department_idFROM departmentsWHERE department_name = 'Sales'
);
-
子查询:
SELECT AVG(salary) FROM employees WHERE department_id = employees.department_id
用于计算每个员工所在部门的平均工资。- 子查询中的
WHERE department_id = employees.department_id
是关键部分,这里表示子查询是针对每个员工所在的部门来计算部门的平均工资。 - 子查询为每个员工执行一次,返回该员工所在部门的平均工资。
-
外层查询:
- 查询员工的姓名和工资
SELECT name, salary FROM employees
。 WHERE
子句决定筛选条件,要求员工的salary
大于子查询返回的值。
- 查询员工的姓名和工资
-
执行过程:
- 外层查询对每个员工逐行进行遍历。
- 对于每个员工,嵌套查询计算其所在部门的平均工资。
- 然后比较该员工的工资是否高于部门平均工资,只有满足条件的员工会被返回。
4.2 FROM 子句中的嵌套查询
语法:
SELECT 列名
FROM (子查询) AS 临时表
使用场景:
- FROM 子句中的嵌套查询被称为派生表,类似于创建了一个临时表。它可以简化复杂的聚合操作,特别是当需要多次使用相同的中间结果时。
- 这种方法常用于对中间结果进行进一步的查询,例如对一个已经聚合的数据集再次进行过滤或计算。
示例:
SELECT department_name, avg_salary
FROM (SELECT department_id, AVG(salary) AS avg_salaryFROM employeesGROUP BY department_id
) AS avg_department_salaries
JOIN departments ON avg_department_salaries.department_id = departments.department_id;
-
子查询:
- 子查询
SELECT department_id, salary FROM employees
提取所有员工的部门ID和工资,形成了一个虚拟表dept_employees
。 - 这个虚拟表作为数据源传递给外层查询,就像一个普通的表一样。
- 子查询
-
外层查询:
- 外层查询的
SELECT department_id, AVG(salary) AS average_salary, COUNT(*) AS num_employees
负责从dept_employees
中对数据进行处理。 AVG(salary)
计算每个部门的平均工资。COUNT(*)
计算每个部门的员工数。
- 外层查询的
-
执行过程:
- 子查询生成一个仅包含
department_id
和salary
列的临时表dept_employees
。 - 外层查询对这个临时表的数据进行分组,并计算每个部门的员工数量和平均工资。
- 子查询生成一个仅包含
4.3 SELECT 子句中的嵌套查询
语法:
SELECT (子查询) AS 列名
FROM 表名;
使用场景:
- SELECT 子句中的嵌套查询常用于动态生成新的列。这些子查询通常为每一行返回一个计算结果,用于丰富原始数据集。
- 这种方式通常用于统计计算、数据转换,或者从其他表中提取额外的信息。
示例:
SELECT employee_id, first_name, last_name,(SELECT department_name FROM departments WHERE departments.department_id = employees.department_id) AS department_name
FROM employees;
-
子查询:
- 子查询
SELECT MAX(degree) FROM education WHERE education.employee_id = employees.id
用于查找与当前员工对应的最高学历。 WHERE education.employee_id = employees.id
确保子查询与外层查询中的每个员工相匹配。- 子查询返回当前员工的最高学历。
- 子查询
-
外层查询:
- 外层查询
SELECT name, ... FROM employees
检索所有员工的姓名。 highest_degree
列使用子查询的结果作为额外的信息。
- 外层查询
-
执行过程:
- 对于外层查询中的每个员工,子查询会查找其最高学历,并将其作为外层查询的结果列
highest_degree
。 - 每行执行一次子查询,因此每个员工的最高学历都会与员工姓名一起返回。
- 对于外层查询中的每个员工,子查询会查找其最高学历,并将其作为外层查询的结果列
4.4 HAVING 子句中的嵌套查询
语法:
SELECT 列名
FROM 表名
GROUP BY 列名
HAVING 聚合函数 比较运算符 (子查询);
使用场景:
- HAVING 子句中的嵌套查询通常用于在分组后的数据基础上进行复杂的过滤。HAVING 是对聚合结果(如 SUM、COUNT、AVG 等)的过滤,嵌套查询可以用于比较每个分组的结果与其他表的数据或特定计算值。
- 常见场景是当我们需要对聚合后的结果集进行精细化的过滤时,例如筛选出满足某一条件的分组。
示例:
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*) > (SELECT AVG(employee_count) FROM (SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id) AS dept_counts);
-
子查询:
- 子查询
SELECT AVG(employee_count) FROM (SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id) AS dept_counts
首先计算每个部门的员工数量,然后计算这些数量的平均值。 - 这其实是一个双重嵌套查询,第一层子查询计算每个部门的员工数量,第二层子查询计算这些员工数量的平均值。
- 子查询
-
外层查询:
SELECT department_id FROM employees GROUP BY department_id
对员工按部门进行分组。HAVING COUNT(*) > ...
是一个过滤条件,用于过滤掉员工人数不满足条件的部门。
-
执行过程:
- 外层查询首先按部门分组,计算每个部门的员工数量。
- 子查询计算所有部门的平均员工数量。
HAVING
子句确保只返回那些员工数量大于平均值的部门。
4.5 总结
WHERE
子句中的嵌套查询:用于动态过滤外层查询的行,基于子查询的结果进行比较。FROM
子句中的嵌套查询:创建临时表,允许在外层查询中使用简化的数据集进行进一步的操作。SELECT
子句中的嵌套查询:生成动态列值,将子查询的结果直接应用到外层查询的每一行。HAVING
子句中的嵌套查询:用于基于聚合结果进行分组后的过滤,是处理复杂分组统计场景的有效手段。
5. 嵌套查询的性能考虑
5.1 嵌套查询对性能的影响因素
嵌套查询,尤其是复杂的嵌套查询,可能对数据库性能产生显著的影响。以下是影响性能的主要因素:
-
查询的重复执行:
- 对于相关子查询,每处理一条外层查询的记录,子查询都会执行一次。这样,子查询的执行次数与外层查询的记录数成正比,导致性能下降,特别是在处理大量数据时。
- 非相关子查询相对更快,因为子查询只执行一次,结果存储后供外层查询使用,但如果子查询本身很复杂或数据量很大,性能也会受到影响。
-
索引的利用情况:
- 嵌套查询中,如果子查询和外层查询没有正确地使用索引,数据库可能需要进行大量的全表扫描(Full Table Scan)。这会导致较大的 I/O 负担,进而影响性能。
-
查询的复杂性:
- 嵌套查询往往涉及多个表的联结、分组、排序等操作,复杂的逻辑可能导致数据库查询计划(Query Plan)变得更复杂,增加了查询的处理时间。
5.2 优化嵌套查询的方法
-
使用
JOIN
替代子查询:- 如果可以,将嵌套查询转换为
JOIN
查询。JOIN
查询通常更容易优化,数据库可以更高效地处理连接操作。例如,子查询可以被重写为INNER JOIN
或LEFT JOIN
,这通常会显著提高性能。
- 如果可以,将嵌套查询转换为
-
索引优化:
- 在参与嵌套查询的字段上创建索引,尤其是用于过滤条件的字段。例如,在
WHERE
子句中出现的字段,如果有适当的索引,可以显著提高查询速度。
- 在参与嵌套查询的字段上创建索引,尤其是用于过滤条件的字段。例如,在
-
避免相关子查询:
- 尽可能避免使用相关子查询,因为相关子查询会为外层查询的每条记录执行一次子查询,效率较低。可以尝试将相关子查询重写为非相关子查询或连接查询。
-
分解复杂查询:
- 将复杂的嵌套查询分解为多个简单的查询,使用临时表或视图保存中间结果。这种做法有时可以简化数据库的处理逻辑,提升性能。
6. 嵌套查询的优势与劣势
优势
- 功能强大:嵌套查询能够处理复杂的业务逻辑,尤其是当需要在同一个查询中进行多个独立计算时(如计算聚合值、条件筛选等)。
- 代码结构简洁:某些情况下,嵌套查询可以避免使用中间结果或多次查询,代码逻辑更加紧凑。
- 动态筛选:嵌套查询可以动态计算出结果,适合处理依赖于其他结果的数据操作。
劣势
- 性能问题:嵌套查询,特别是相关子查询,可能带来性能问题,尤其是在大数据集上运行时效率较低。
- 可读性差:多层嵌套查询会导致查询逻辑复杂、代码难以理解,维护和调试变得困难。
- 数据库支持差异:不同数据库对嵌套查询的优化程度不一样,在某些数据库中嵌套查询的表现不佳,可能需要转换为其他查询方式。
相关文章:
MySQL中的嵌套查询
1. 嵌套查询的定义 嵌套查询指在一个查询语句的某个部分嵌入一个子查询。 嵌套查询的执行过程遵循“先子查询、后外层查询”的逻辑。首先,子查询执行并返回一个结果集,可能是一个值、一行或多行数据。接着,外层查询使用子查询的结果继续对数…...

win10 提示pl2303hxa已停产,请联系供货商解决方案
1. 下载驱动 需要下载老版的驱动,下载地址:https://www.pcsoft.com.cn/soft/211569.html 选择普通下载 或者从CSDN下载: 2. 安装驱动 下载完成后安装下载好的驱动文件,安装后更新pl2303的驱动,如下:…...

浙大数据结构:07-图5 Saving James Bond - Hard Version
这道题也是很有难度,我最开始尝试用Dijkstra来做,发现不是很好处理,用bfs还不错。 机翻: 1、条件准备 n为鳄鱼数量,jump为跳跃距离,headjump为第一次跳跃距离,包括了岛的半径。 isalive标识…...

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL69
脉冲同步器(快到慢) 描述 sig_a 是 clka(300M)时钟域的一个单时钟脉冲信号(高电平持续一个时钟clka周期),请设计脉冲同步电路,将sig_a信号同步到时钟域 clkb(100M&…...

电商商品数据采集||高并发||多语言请求实例演示|京东|淘宝商品详情数据SKU价格
以京东商品数据采集为例 京东商品详情接口数据采集是指通过调用京东提供的商品详情API接口,获取商品的详细信息。以下是一个简单的步骤来实现这个功能: 1. 注册京东开发者账号 首先,你需要注册一个京东开发者账号,并创建一个应…...

云手机哪款好用?2024年云手机推荐对比指南
随着云手机市场的快速扩展,消费者在选择云手机时面临着众多选择。为了帮助大家找到最适合自己的云手机,小编特意整理了一份当前市场上几款备受关注的云手机品牌对比,大家一起往下看吧。 1. Ogphone云手机 Ogphone云手机是近年来海外业务版块迅…...

无人机航测内业常用建模软件手册下载(上)
航测项目外业离不开无人机,内业离不开制图软件。 无人机航测外业作业包括控点布设、航线规划、仿地飞行、航拍等流程,而内业数据处理则常涉及到CC、Pix4D、PhotoScan、大疆智图、重建大师、M3D、瞰景Smart3D、天工等软件。 我们整理了这些常用建模软件…...

Python Django ORM 的工作原理
在 Web 开发中,处理数据库是非常常见的需求,尤其是在构建动态应用程序时。Django 作为一个流行的 Python Web 框架,提供了一套强大的工具帮助开发者轻松管理数据库。Django 的 ORM(对象关系映射,Object-Relational Map…...
GoLang编程常用规范/工具
代码格式化工具 代码风格: go install github.com/fsgo/go_fmt/cmd/gorgeouslatest gorgeous # 仅格式化git有改动的文件。如需格式化所有文件,可以执行 gorgeous ./...标签格式:https://github.com/4meepo/tagalign go install github.c…...

数字王国里的虚拟人――技术、商业与法律解读
💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【海拥导航】🤟 找工作,来万码优才:👉 #小程序://万码优才/HDQZJEQiCJb9cFi💅 想寻找共同学习交流,摸鱼划水的小伙伴,请点击【全栈技…...
Java后端基础练习|请求参数
请求参数,可以通过四种方式传递到后端 请求路径查询参数请求体请求头 controller代码 package com.urfread.breaknews.core.controller;import com.urfread.breaknews.core.common.model.ResultData; import lombok.Data; import org.springframework.web.bind.a…...

C# + SQLiteExpert 进行(cipher)加密数据库开发+Costura.Fody 清爽发布
一:让 SQLiteExpert 支持(cipher)加密数据库 SQLiteExpert 作为SQlite 的管理工具,默认不支持加密数据库的,使其成为支持(cipher)加密数据库的管理工具,需要添加e_sqlcipher.dll &…...
MySQL 8.0 新特性之自增变量持久化
MySQL 8.0 新特性之自增变量持久化 文章目录 MySQL 8.0 新特性之自增变量持久化MySQL 5.7 vs 8.0 测试对比MySQL 5.7MySQL 8.0 参考资料 MySQL 8.0 中支持自增变量持久化,实际也是解决之前版本中存在的自增主键重启重置的 BUG 问题( BUG #199࿱…...

网站建设公司哪家好?好的网站建设公司应该有哪些特别之处?
面对众多的网站建设公司,企业该如何选择呢?如何才能避坑呢?本文将探讨好的网站建设公司应该具备的特别之处 案例,这是最直观的表现,一个好的网站建设公司必然拥有为数众多的的案例展示,且这些案例质量高&a…...

香山南湖架构分析--FE
总体架构 分支预测和指令缓存,通过FTQ达到解耦的目的;FTQ将请求送给ICache,进行取指;取出的指令码通过预译码初步检查分支预测的错误并及时冲刷预测流水线;检查后的指令送入指令缓冲并传给译码模块,最终形成后端的指令…...

【Linux的那些事】shell命名及Linux权限的理解
目录 一、shell命令以及运行原理 二、Linux权限的概念 三、Linux权限管理 3.1.文件访问者的分类(人) 3.2.文件类型和访问权限(事物属性) 3.3.文件权限值的表示方法 3.4.文件访问权限的相关设置方法 a)chmod b)chown c)…...

Visual Studio 2022 配置 Boost 库
一、使用预编译版本 尽量不要使用预编译版本,因为可能构建的不完全,还得重新构建,不如一步到位 1. 下载预编译的 Boost 库 下载:Boost C Libraries - Browse /boost-binaries at SourceForge.net 2. 选择 msvc 版本࿰…...

逻辑回归(下): Sigmoid 函数的发展历史
背景 闲来无事翻了一下之前买的一个机器学习课程及之前记录的网络笔记,发现遇到公式都是截图,甚至是在纸上用笔推导的。重新整理一遍之前逻辑回归函数的学习笔记,主要是为了玩一下 LaTex 语法,写公式挺有意思的。 整理之前三篇笔…...
快速理解mQ(三)——RabbitMQ 各种交换机的区别与应用
RabbitMQ是一个开源的消息代理软件,它实现了高级消息队列协议(AMQP),允许应用程序或系统以异步的方式交换数据。RabbitMQ中的交换机(Exchange)是消息的分发中心,它接收来自生产者的消息…...

【五分钟学会】YOLO11 自定义数据集从训练到部署
数据集地址 数据集包含 360 张红血细胞图像及其注释文件,分为训练集与验证集。训练文件夹包含 300 张带有注释的图像。测试和验证文件夹都包含 60 张带有注释的图像。我们对原始数据集进行了一些修改以准备此 CBC 数据集,并将数据集分成三部分。在360张…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...