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 常见的比较运算符

  1. =:用于检查外层查询的某个列的值是否等于子查询返回的值。
  2. ><>=<=:用于比较外层查询的列值与子查询结果之间的大小关系。
  3. IN:用于检查外层查询的某个列值是否在子查询返回的一组结果中。
  4. ANY / SOME:用于检查外层查询的列值是否满足子查询返回结果中的任意一个值的条件。
  5. 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 多行子查询

  • 定义:多行子查询是指子查询返回一个或多个字段的一个或多个值。外层查询通过集合运算符(如 INANYALL 等)来将外层查询的字段与子查询返回的多个结果进行比较和匹配。
  • 特点:子查询返回的是一组值(可以是一个或多个字段),外层查询使用这些值进行筛选或比较。
  • 应用场景:当子查询返回多个值时,外层查询通过集合运算符与这些结果进行匹配。例如,查找某个字段的值是否存在于一组返回值中。

语法结构

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 子句中,帮助判断当前房屋的价格是否高于其所在城市的平均房价。

整体逻辑

  1. 子查询的动态执行:对于每一条外层查询的记录(即每一个房屋),子查询都会基于该房屋的城市重新计算城市的平均房价。比如,当外层查询正在处理北京的某个房屋时,子查询会检索所有位于北京的房屋,并计算这些房屋的平均价格。

  2. 条件比较:外层查询的 WHERE 子句会将当前房屋的价格与子查询返回的城市平均房价进行比较。如果当前房屋的价格高于该城市的平均房价,则该房屋的编号和价格会被返回。


3.4 非相关子查询

  • 定义:非相关子查询是指子查询与外层查询没有直接的依赖关系。子查询独立执行一次,返回一个结果,然后外层查询无论处理多少条记录,都只会与这个结果进行比较。
  • 特点:子查询在外层查询之前独立执行一次,返回一个固定值。这个值用于外层查询的每一条记录中进行比较或筛选。
  • 应用场景:当子查询的结果与外层查询无关时使用,例如在查询中用到的某个全局值或固定结果。

语法结构

SELECT 列名 
FROM 表名 
WHERE 列名 = (子查询);

示例

SELECT 姓名 
FROM 员工 
WHERE 部门编号 = (SELECT 部门编号 FROM 部门 WHERE 部门名称 = '市场部');

解释

  • 子查询 (SELECT 部门编号 FROM 部门 WHERE 部门名称 = '市场部') 独立执行一次,返回市场部的部门编号。
  • 外层查询不论处理多少条员工记录,都始终与市场部的编号进行比较。

3.5 总结

  • 单行子查询:返回一个字段的一个值,外层查询与该值进行比较或筛选。
  • 多行子查询:返回一个或多个字段的多个值,外层查询使用集合运算符与这些值进行匹配。
  • 相关子查询:每次外层查询处理新记录时,子查询都会根据该记录的值重新执行,生成新的结果。
  • 非相关子查询:子查询只执行一次,返回固定的结果,外层查询无论处理多少条记录,都与该固定结果进行比较。

4. 基于子查询位置的分类

  • 依据:这一分类基于子查询在 SQL 语句中所处的位置,即子查询是出现在 WHEREFROMSELECT 还是 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_idsalary 列的临时表 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 JOINLEFT JOIN,这通常会显著提高性能。
  • 索引优化

    • 在参与嵌套查询的字段上创建索引,尤其是用于过滤条件的字段。例如,在 WHERE 子句中出现的字段,如果有适当的索引,可以显著提高查询速度。
  • 避免相关子查询

    • 尽可能避免使用相关子查询,因为相关子查询会为外层查询的每条记录执行一次子查询,效率较低。可以尝试将相关子查询重写为非相关子查询或连接查询。
  • 分解复杂查询

    • 将复杂的嵌套查询分解为多个简单的查询,使用临时表或视图保存中间结果。这种做法有时可以简化数据库的处理逻辑,提升性能。

6. 嵌套查询的优势与劣势

优势

  • 功能强大:嵌套查询能够处理复杂的业务逻辑,尤其是当需要在同一个查询中进行多个独立计算时(如计算聚合值、条件筛选等)。
  • 代码结构简洁:某些情况下,嵌套查询可以避免使用中间结果或多次查询,代码逻辑更加紧凑。
  • 动态筛选:嵌套查询可以动态计算出结果,适合处理依赖于其他结果的数据操作。

劣势

  • 性能问题:嵌套查询,特别是相关子查询,可能带来性能问题,尤其是在大数据集上运行时效率较低。
  • 可读性差:多层嵌套查询会导致查询逻辑复杂、代码难以理解,维护和调试变得困难。
  • 数据库支持差异:不同数据库对嵌套查询的优化程度不一样,在某些数据库中嵌套查询的表现不佳,可能需要转换为其他查询方式。

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

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

相关文章

FireRedTTS - 小红书最新开源AI语音克隆合成系统 免训练一键音频克隆 本地一键整合包下载

小红书技术团队FireRed最近推出了一款名为FireRedTTS的先进语音合成系统&#xff0c;该系统能够基于少量参考音频快速模仿任意音色和说话风格&#xff0c;实现独特的音频内容创造。 FireRedTTS 只需要给定文本和几秒钟参考音频&#xff0c;无需训练&#xff0c;就可模仿任意音色…

【leetcode】 45.跳跃游戏 ||

如果我们「贪心」地进行正向查找&#xff0c;每次找到可到达的最远位置&#xff0c;就可以在线性时间内得到最少的跳跃次数。 例如&#xff0c;对于数组 [2,3,1,2,4,2,3]&#xff0c;初始位置是下标 0&#xff0c;从下标 0 出发&#xff0c;最远可到达下标 2。下标 0 可到达的…

如何在IDEA使用git上传代码的时候过滤掉非.java文件

1.情况分析 我们的java上传代码的时候&#xff0c;经常会出现这个xml,等等的无关文件&#xff0c;但是这个时候我们使用这个里面的git上传的时候无法过滤掉&#xff0c;我们在自己的这个代码仓库查看的时候经常显示无关文件&#xff0c;这个时候我们就可以通过相关配置进行文件…

MySQL连接查询:联合查询

先看我的表结构 emp表 联合查询的关键字&#xff08;union all, union&#xff09; 联合查询 基本语法 select 字段列表 表A union all select 字段列表 表B 例子&#xff1a;将薪资低于5000的员工&#xff0c; 和 年龄大于50 岁的员工全部查询出来 第一种 select * fr…

Java版本的SSE服务端实现样例

简单记录一下使用netty方式实现SSE的服务端功能 目录 简要说明基于Netty功能需求后端代码1. 创建一个SpringBoot 应用2. 创建服务端功能3. 创建前端功能4. 测试SSE 封装为组件 简要说明 Server-Sent Events (SSE) 是一种用于在客户端和服务器之间建立单向通信的技术。 它允许服…

通信工程学习:什么是RFID射频识别

RFID&#xff1a;射频识别 RFID射频识别&#xff08;Radio Frequency Identification&#xff09;&#xff0c;又称为无线射频识别&#xff0c;是一种非接触式的自动识别技术。它通过无线电信号来识别特定目标并读写相关数据&#xff0c;而无需在识别系统与特定目标之间建立机械…

任务【浦语提示词工程实践】

0.1 环境配置 首先点击左上角图标&#xff0c;打开Terminal&#xff0c;运行如下脚本创建虚拟环境&#xff1a; # 创建虚拟环境 conda create -n langgpt python3.10 -y 运行下面的命令&#xff0c;激活虚拟环境&#xff1a; conda activate langgpt 之后的操作都要在这个环境…

【EXCEL数据处理】000013 案例 EXCEL筛选与高级筛选。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000013 案例 EXCEL筛选与高级筛选。使用的软件&#…

【华为OD机试真题】95、最少面试官数

package mainimport ("fmt""sort" )type s struct {start intend intworkCount int }type duration struct {start intend int }// 查询时间段内是否有可用的面试官 func getFreeS(sList []*s, d *duration, workCountLimit int) (sIndex int)…

案例:问题处理与原因分析报告的模板

系统上线后暴露的问题也是一种财富&#xff0c;我们需要从中吸收经验教训&#xff0c;规避其他类似的问题。对于上线后的问题如何进行原因分析&#xff0c;我提供两个分析报告的模板&#xff0c;供大家参考。 模板案例1&#xff1a;共性现象的原因分析报告 模板案例二&#xf…

Java后端面试很水的,7天就能搞定!

随着Java的越来越卷&#xff0c;面试也直接上难度了&#xff0c;从以前的八股文到场景题了&#xff0c;尤其是有经验的去面试&#xff0c;场景题都是会问的&#xff0c;近期面试过的应该都深有体会&#xff01; 场景题230道&#xff1a; 1.分布式锁加锁失败后的等待逻辑是如何…

人脸表情行为识别系统源码分享

人脸表情行为识别系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Webstorm 中对 Node.js 后端项目进行断点调试

首先&#xff0c;肯定需要有一个启动服务器的命令脚本。 然后&#xff0c;写一个 debug 的配置&#xff1a; 然后&#xff0c;debug 模式 启动项目和 启动调试服务&#xff1a; 最后&#xff0c;发送请求&#xff0c;即可调试&#xff1a; 这几个关键按钮含义&#xff1a; 重启…

基于单片机的智能浇花系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采样DHT11温湿度传感器检测温湿度&#xff0c;通过LCD1602显示 4*4按键矩阵可以设置温度湿度阈值&#xff0c;温度大于阈值则开启水泵&#xff0c;湿度大于阈值则开启风扇…

关于PPT生成的开源大模型总结

目前需要开源的PPT生成模型&#xff0c;在这里对github上的一些模型进行筛选 搜索关键词&#xff1a;ppt generate&#xff08;more starts&#xff09; williamfzc/chat-gpt-ppt: 支持直接生成PPT支持中英文需要调用ChatGPT&#xff08;Add your token (official openai api k…

【Matlab】Matlab 导入数据.csv或者.xlsx文件,然后使用这些数据来绘制图表

Matlab 导入数据.csv或者.xlsx文件&#xff0c;然后使用这些数据来绘制图表 初始数据 filename C:\Users\jia\Desktop\yadian\data\1Hz 2024_09_12 17_10_06.csv; 代码&#xff1a; clc;clear close all; % 读取Excel文件 filename C:\Users\jia\Desktop\yadian\data\1Hz …

智能手表(Smart Watch)项目

文章目录 前言一、智能手表&#xff08;Smart Watch&#xff09;简介二、系统组成三、软件框架四、IAP_F411 App4.1 MDK工程结构4.2 设计思路 五、Smart Watch App5.1 MDK工程结构5.2 片上外设5.3 板载驱动BSP5.4 硬件访问机制-HWDataAccess5.4.1 LVGL仿真和MDK工程的互相移植5…

注意,学会解决路由问题!(未完)

文章目录 Abstract1 Introduction2 相关工作3 注意力模型3.1 编码器3.2 解码器Abstract 最近提出的为组合优化问题学习启发式方法的想法很有前景,因为它可以节省昂贵的开发成本。然而,要将这一想法推向实际应用,我们需要更好的模型和更好的训练方法。我们在这两个方向都做出…

Java_Se 容器2(Set 接口)

Set接口继承自Collection接口&#xff0c;Set接口中没有新增方法&#xff0c;它和Collection接口保持完全一致。我们在前面学习List接口的使用方式&#xff0c;在Set中仍然适用。因此&#xff0c;学习Set的使用将没有任何难度。Set接口特点Set特点&#xff1a;无序、不可重复。…

国庆作业

day1 1.开发环境 Linux系统GCCFDBmakefilesqlite3 2.功能描述 项目功能: 服务器&#xff1a;处理客户端的请求&#xff0c;并将数据存入数据库中&#xff0c;客户端请求的数据从数据库进行获取&#xff0c;服务器转发给客户端。 用户客户端&#xff1a;实现账号的注册、登…