MySQL数据库基础 === 多表查询

news2025/1/12 10:01:29

目录

什么是多表查询?

多表查询的基本语法

多表关系

测试数据准备

一对多

多对多

一对一

查询

内连接查询

外连接查询

自连接查询

联合查询 union, union all

子查询

标量子查询

列子查询

行子查询

表子查询

DISTINCT  去重

单列去重

多列去重

注意事项

练习

查询研发部所有的员工信息以及工资等级 三表查询讲解

为什么 AVG(e.salary) 不能直接与 e.* 一起使用?

 查询低于本部门平均工资的员工信息 

总结


什么是多表查询?

在关系型数据库中,数据通常分散在多个表中,而不是存储在单个表中。多表查询是指从一个以上的表中检索数据并将其组合以满足特定需求的操作。通过多表查询,您可以执行以下操作:

  • 检索与多个表关联的数据。
  • 在多个表之间建立关联,以便于数据分析。
  • 聚合和计算多个表中的数据。
  • 更新和删除多个表中的数据。

多表查询通常涉及使用 JOIN 子句将不同的表连接在一起,以创建一个包含所需数据的结果集。

多表查询的基本语法

在 MySQL 中,使用 JOIN 子句来执行多表查询。JOIN 子句用于将两个或多个表中的行组合在一起,以创建一个包含来自这些表的数据的结果集。基本的 JOIN 子句语法如下:

SELECT 列名
FROM 表1
JOIN 表2
ON 表1.列 = 表2.列;

其中:

  • SELECT 语句指定要检索的列。
  • 表1表2 是要连接的表。
  • ON 子句指定连接条件,即哪些列应该匹配以创建连接。

多表关系

  • 一对多(多对一)
  • 多对多
  • 一对一

测试数据准备

员工表  && 部门表

CREATE TABLE dept(
	id INT PRIMARY KEY AUTO_INCREMENT COMMENT "主键",
	name  VARCHAR ( 50 ) NOT NULL  COMMENT "年龄"
) COMMENT "部门表"

-- 插入数据
INSERT INTO dept(name) VALUES ("研发部"),("市场部"),("财务部"),("销售部"),("总裁办")

CREATE TABLE emp (
	id INT AUTO_INCREMENT COMMENT 'ID' PRIMARY KEY,
	name VARCHAR ( 50 ) NOT NULL COMMENT '姓名',
	age INT COMMENT '年龄',
	job VARCHAR ( 20 ) COMMENT '职位',
	salary INT COMMENT '薪资',
	entrydate DATE COMMENT '入职时间',
	managerid INT COMMENT '直属领导ID',
	dept_id INT COMMENT '部门ID' 
	) COMMENT '员工表';
-- 	添加数据
	INSERT INTO emp (name, age, job, salary, entrydate, managerid, dept_id) VALUES
('金庸', 66, '总裁', 20000, '2000-01-01', NULL, 5),
('张无忌', 20, '项目经理', 12500, '2005-12-05', 1, 1),
('杨逍', 33, '开发', 8400, '2000-11-03', 2, 1),
('韦一笑', 48, '开发', 11000, '2002-02-05', 2, 1),
('常遇春', 43, '开发', 10500, '2004-09-07', 3, 1),
('小昭', 19, '程序员鼓励师', 6600, '2004-10-12', 2, 1);

一对多

案例:部门与员工
关系:一个部门对应多个员工,一个员工对应一个部门
实现:在多的一方建立外键,指向一的一方的主键

多对多

案例:学生与课程
关系:一个学生可以选多门课程,一门课程也可以供多个学生选修
实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

一对一

案例:用户与用户详情
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

查询

合并查询(笛卡尔积,会展示所有组合结果):
select * from employee, dept;

笛卡尔积:两个集合A集合和B集合的所有组合情况(在多表查询时,需要消除无效的笛卡尔积)

消除无效笛卡尔积:
select * from employee, dept where employee.dept = dept.id;

-- 多表查询 
SELECT * FROM  emp,dept 
-- 隐式内连接
SELECT * FROM emp,dept WHERE emp.dept_id = dept.id 

内连接查询

内连接查询的是两张表交集的部分

隐式内连接:
SELECT 字段列表 FROM 表1, 表2 WHERE 条件 ...;

显式内连接:
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ...;

显式性能比隐式高

-- 查询员工姓名,及关联的部门的名称 
-- 隐式
SELECT e.name,d.name  FROM emp AS e, dept AS d WHERE e.dept_id = d.id
-- 显式
SELECT e.name ,d.name FROM emp AS e INNER JOIN dept AS d  ON e.dept_id = d.id

外连接查询

左外连接:
查询左表所有数据,以及两张表交集部分数据
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ...;
相当于查询表1的所有数据,包含表1和表2交集部分数据

右外连接:
查询右表所有数据,以及两张表交集部分数据
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ...;

-- 左外连接 (相当于查询表1的所有数据,包含表1和表2交集部分数据) emp的所有数据&&对应的部门
SELECT e.*, d.name FROM emp AS e LEFT OUTER JOIN dept AS d ON e.dept_id=d.id


-- 右外连接 (查询右表所有数据,以及两张表交集部分数据)dept的所有数据&&对应员工的名称
SELECT d.*, e.name FROM emp AS e RIGHT OUTER JOIN dept AS d ON e.dept_id=d.id
-- 同样可以达成右外
SELECT d.*, e.name FROM dept AS d LEFT OUTER JOIN emp AS e  ON e.dept_id=d.id

自连接查询

当前表与自身的连接查询,自连接必须使用表别名

语法:
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ...;

自连接查询,可以是内连接查询,也可以是外连接查询

-- 查询员工及其所属领导的名字 (员工的 managerid 等于 领导的id)
SELECT e.name AS emp_name,m.name AS manage_name FROM emp AS e  INNER JOIN emp AS m ON  e.managerid=m.id

-- 没有领导的也查询出来
SELECT e.name AS emp_name,m.name AS manage_name FROM emp AS e LEFT OUTER JOIN emp AS m ON e.managerid = m.id

联合查询 union, union all

把多次查询的结果合并,形成一个新的查询集

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...

注意事项

  • UNION ALL 会有重复结果,UNION 不会
  • 联合查询比使用or效率高,不会使索引失效
  • 对于联合表查询的多张表的列数必须一致,字段类型也需要一致
-- 将薪资大于 8000 的员工,和年龄大于50岁的员工查出来
SELECT * FROM emp WHERE salary > 8000
UNION ALL
SELECT * FROM emp WHERE age > 50

-- 合并之后去重
SELECT * FROM emp WHERE salary > 8000
UNION
SELECT * FROM emp WHERE age > 50

子查询

SQL语句中嵌套SELECT语句,称谓嵌套查询,又称子查询。
SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2);
子查询外部的语句可以是 INSERT / UPDATE / DELETE / SELECT 的任何一个

根据子查询结果可以分为:

  • 标量子查询(子查询结果为单个值)
  • 列子查询(子查询结果为一列)
  • 行子查询(子查询结果为一行)
  • 表子查询(子查询结果为多行多列)

根据子查询位置可分为:

  • WHERE 之后
  • FROM 之后
  • SELECT 之后

标量子查询

子查询返回的结果是单个值(数字、字符串、日期等)。
常用操作符:- < > > >= < <=

-- 查询研发部所有员工
SELECT id FROM dept WHERE name = "研发部"
-- 根据研发部ID,查询员工信息
SELECT * FROM emp WHERE dept_id = 1;
-- 合并
SELECT * FROM emp WHERE dept_id = (SELECT id FROM dept WHERE name = "研发部")
-- 查询 小昭 入职之后的员工信息
SELECT * FROM emp WHERE entrydate > (SELECT entrydate FROM emp WHERE name='小昭')

列子查询

子查询 返回的结果是一列(可以是多行)。

常用操作符:

操作符描述
IN在指定的集合范围内
NOT IN不在指定的集合范围内
ANY子查询返回列表中,有任意一个满足即可
SOME与ANY等同,使用SOME的地方都可以使用ANY
ALL子查询返回列表的所有值都必须满足
-- 查询比研发部所有人工资都高的员工信息
-- 1.查询所有 研发部 工资
SELECT  id  FROM dept WHERE name = '研发部'
SELECT  salary  FROM emp WHERE dept_id = 1
-- 查询比研发部所有人工资都高的员工信息 (比最大的大)
SELECT * FROM emp WHERE salary > all(SELECT  salary  FROM emp WHERE dept_id = (SELECT  id  FROM dept WHERE name = '研发部'))
-- 查询比研发部任意一人工资高的员工信息 (比最小的大)
SELECT * FROM emp WHERE salary > ANY(SELECT  salary  FROM emp WHERE dept_id = (SELECT  id  FROM dept WHERE name = '研发部'))

行子查询

返回的结果是一行(可以是多列)。
常用操作符:=, <, >, IN, NOT IN

INSERT INTO emp (name, age, job, salary, entrydate, managerid, dept_id) VALUES
('小王', 25, '程序员鼓励师', 6600, '2024-10-03', 2, NULL)


-- 查询与小王的薪资及直属领导相同的员工信息
SELECT * FROM emp WHERE salary = 6600 AND managerid = 2
-- 等价于上边的写法
select * from emp where (salary,managerid)=(6600,2)

SELECT salary, managerid FROM emp WHERE name = "小王"
select * from emp where (salary,managerid)=(SELECT salary, managerid FROM emp WHERE name = "小王")

表子查询

返回的结果是多行多列
常用操作符:IN

-- 查询小王,杨逍的职位和薪资相同的员工
-- 1.查询职位和薪资
SELECT job,salary FROM emp WHERE name="小王" OR name="杨逍"
-- 查询小王,杨逍的职位和薪资相同的员工
SELECT * FROM emp WHERE (job,salary) IN (SELECT job,salary FROM emp WHERE name="小王" OR name="杨逍")
-- 查询入职日期是2005-01-01之后的员工,及其部门信息
-- 1.查询入职日期是2005-01-01之后的员工
SELECT * FROM emp WHERE entrydate > '2005-01-01'
-- 2.查询这部分员工对应的部门信息
SELECT e.*,d.* FROM (SELECT * FROM emp WHERE entrydate > '2005-01-01') AS e LEFT OUTER JOIN dept AS d ON e.dept_id=d.id

查询入职日期是2005-01-01之后的员工 的 查询步骤

  1. 子查询

    • (SELECT * FROM emp WHERE entrydate > '2005-01-01') AS e
    • 这个子查询从员工表 emp 中筛选出入职日期在 2005 年 1 月 1 日之后的所有员工记录,并将结果集别名为 e。这个别名 e 用于后续的连接操作。
  2. 左连接(LEFT JOIN)

    • LEFT JOIN dept AS d ON e.dept_id = d.id
    • 这个连接操作将子查询结果 e 与部门表 dept 进行左连接。连接条件是员工表中的 dept_id 与部门表中的 id 相等。
    • 左连接的特点:左连接会返回左表(子查询结果 e)中的所有记录,即使这些记录在右表(部门表 dept)中没有匹配的记录。对于没有匹配的记录,右表的列值将显示为 NULL
  3. 选择列

    • SELECT e.*, d.*
    • 这个部分表示选择左表(子查询结果 e)和右表(部门表 dept)中的所有列。e.* 表示选择子查询结果中的所有列,d.* 表示选择部门表中的所有列。

DISTINCT  去重

DISTINCT 是 SQL 语句中的一个关键字,用于去除查询结果中的重复行,确保每一行都是唯一的。它通常用于 SELECT 语句中,可以对单个列或多个列进行去重操作。以下是 DISTINCT 的一些常见用法和示例:

单列去重

如果你只想选择某一列的唯一值,可以使用 DISTINCT 关键字。例如,假设有一个员工表 emp,你想查询所有不同的职位:

SELECT DISTINCT job FROM emp;

这条语句会返回员工表中所有不同的职位,每个职位只出现一次,即使表中有多个员工拥有相同的职位。

结果:

job
程序员
产品经理
测试工程师

多列去重

DISTINCT 也可以用于多个列,它会根据这些列的组合值来去除重复行。例如,如果你想查询所有不同的部门和职位组合:

SELECT DISTINCT dept_id, job FROM emp;

结果:

dept_idjob
1程序员
2产品经理
1测试工程师

 

这条语句会返回员工表中所有不同的部门和职位组合,每个组合只出现一次。

注意事项

  1. 性能影响:使用 DISTINCT 会增加查询的复杂度,特别是当数据量较大时。数据库需要对结果进行排序和去重操作,这可能会导致性能下降。如果可能,尽量避免在大数据集上使用 DISTINCT
  2. 索引优化:如果经常需要对某些列进行去重操作,可以考虑在这些列上创建索引,以提高查询效率。
  3. 组合列去重:当使用多个列进行去重时,数据库会根据这些列的组合值来判断是否重复。这意味着即使某些列的值相同,但只要组合值不同,这些行就不会被去重。

练习

准备薪资等级表

CREATE TABLE salgrade ( grade INT, losal INT, hisal INT ) COMMENT '薪资等级表';
INSERT INTO salgrade
VALUES
	( 1, 0, 3000 );
INSERT INTO salgrade
VALUES
	( 2, 3001, 5000 );
INSERT INTO salgrade
VALUES
	( 3, 5001, 8000 );
INSERT INTO salgrade
VALUES
	( 4, 8001, 10000 );
INSERT INTO salgrade
VALUES
	( 5, 10001, 15000 );
INSERT INTO salgrade
VALUES
	( 6, 15001, 20000 );
INSERT INTO salgrade
VALUES
	( 7, 20001, 25000 );
INSERT INTO salgrade
VALUES
	( 8, 25001, 30000 );

 

--  1.查询员工的,姓名 年龄 职位 部门信息,(隐式内连接)
SELECT e.name,e.age,e.job,d.name FROM emp AS e,dept AS d WHERE e.dept_id=d.id 
-- 	2.查询 年龄 小于30岁的员工的姓名,年龄 职位 部门信息,(显式内连接)
SELECT e.name,e.age,e.job,d.name FROM emp AS e INNER JOIN dept AS d ON e.dept_id=d.id  WHERE  e.age<30
-- 	3.查询拥有员工的部门id 部门名称
SELECT DISTINCT d.id,d.name FROM emp AS e INNER JOIN dept AS d ON e.dept_id=d.id
-- 	4.查询所有年龄大于40的员工,及其归属的部门名称,如果员工没有分配部门,也需要展示出来
SELECT e.*,d.name FROM emp AS e LEFT OUTER JOIN dept AS d ON e.dept_id=d.id WHERE e.age>40
-- 	5.查询所有员工的工资等级
SELECT * FROM  emp  AS e INNER JOIN salgrade AS s ON e.salary BETWEEN s.losal AND s.hisal
--  6.查询研发部所有的员工信息以及工资等级
SELECT
	e.*,
	s.grade 
FROM
	emp AS e
	INNER JOIN dept AS d ON e.dept_id = d.id
	INNER JOIN salgrade AS s ON e.salary BETWEEN s.losal 
	AND s.hisal 
WHERE
	d.NAME = "研发部"
 
--  7.查询研发部的平均工资
SELECT AVG(e.salary) FROM emp AS e INNER JOIN dept AS d ON e.dept_id = d.id  WHERE d.name="研发部"
 
--  8 查询比小王工资都高的员工信息 (标量子查询,子查询返回的结果是单个值(数字、字符串、日期等))
SELECT salary FROM emp WHERE name="小王"
SELECT * FROM emp WHERE salary > (SELECT salary FROM emp WHERE name="小王")
 
--  9.查询比平均薪资高的员工信息 (标量子查询)
SELECT AVG(salary) FROM emp
SELECT * FROM emp WHERE salary>(SELECT AVG(salary) FROM emp)


-- 10. 查询低于本部门平均工资的员工信息
-- 查询某个部门的平均薪资
SELECT AVG(salary) FROM emp AS e1 WHERE e1.dept_id =1 
SELECT * FROM emp AS e2 WHERE e2.salary < (SELECT AVG(salary) FROM emp AS e1 WHERE e1.dept_id = e2.dept_id )
 
--  11.查询 所有的部门信息,并统计 部门员工人数
SELECT * FROM dept
SELECT COUNT(*) FROM emp WHERE dept_id =1

SELECT d.id,d.name,(SELECT COUNT(*) FROM emp AS e WHERE e.dept_id =d.id) AS "人数" FROM dept AS d

查询研发部所有的员工信息以及工资等级 三表查询讲解

  1. 从员工表 emp 中读取数据

    • 读取所有员工记录。
  2. 将员工表 e 与部门表 d 进行内连接

    • 连接条件:e.dept_id = d.id
    • 生成一个临时表,包含员工和部门的信息。
  3. 将临时表与薪资等级表 s 进行内连接

    • 连接条件:e.salary BETWEEN s.losal AND s.hisal
    • 生成一个新的临时表,包含员工、部门和薪资等级的信息。
  4. 应用过滤条件

    • 过滤条件:d.name = "研发部"
    • 从临时表中筛选出部门名称为“研发部”的记录。
  5. 选择最终需要的列

    • 选择员工表 e 中的所有列和薪资等级表 s 中的 grade 列。

为什么 AVG(e.salary) 不能直接与 e.* 一起使用?

当你在 SELECT 子句中同时使用 e.*AVG(e.salary) 时,会出现以下问题:

  1. 数据不一致

    • e.* 会返回每一行员工的详细信息。
    • AVG(e.salary) 会返回所有员工薪资的平均值,这是一个单一的值。
    • 如果不使用 GROUP BY 子句,数据库无法确定如何将这个单一的平均值与每一行员工信息结合起来。
  2. 分组不明确

    • 聚合函数需要明确的分组条件,以确定如何对数据进行汇总。
    • 如果不使用 GROUP BY 子句,数据库不知道如何处理每一行数据,因为每一行数据都是独立的,而聚合函数需要对一组数据进行计算。

 

 查询低于本部门平均工资的员工信息 

查询步骤

  1. 子查询

    • (SELECT AVG(salary) FROM emp AS e1 WHERE e1.dept_id = e2.dept_id)
    • 这个子查询计算每个部门的平均薪资。对于每个员工 e2,它会找到与 e2 同部门的员工 e1,并计算这些员工的平均薪资。
  2. 主查询

    • SELECT * FROM emp AS e2
    • 这个主查询选择员工表 emp 中的所有列,并将结果集别名为 e2
    • WHERE e2.salary < (SELECT AVG(salary) FROM emp AS e1 WHERE e1.dept_id = e2.dept_id)
    • 过滤条件,只选择那些薪资低于其所在部门平均薪资的员工。

执行顺序

  1. 从员工表 emp 中读取数据

    • 读取所有员工记录。
  2. 对每个员工 e2 执行子查询

    • 对于每个员工 e2,找到与 e2 同部门的员工 e1,并计算这些员工的平均薪资。
  3. 应用过滤条件

    • 只选择那些薪资低于其所在部门平均薪资的员工。

总结

一、多表查询基础

  • 基本概念:通过JOIN子句等将多个表连接,创建包含所需数据的结果集。
  • 多表关系类型:包括一对多(多对一)、多对多、一对一三种。

二、多表查询语法及类型

  • 基本语法:SELECT 列名 FROM 表1 JOIN 表2 ON 表1.列 = 表2.列;
  • 合并查询(笛卡尔积):select * from 表1, 表2; 通过添加WHERE条件可消除无效笛卡尔积。
  • 内连接查询
    隐式内连接SELECT 字段列表 FROM 表1, 表2 WHERE 条件 ...;
    显式内连接SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 ...;
  • 外连接查询
    左外连接SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 ...;
    右外连接SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件 ...;
  • 自连接查询:SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ...;
  • 联合查询:SELECT 字段列表 FROM 表A ... UNION [ALL] SELECT 字段列表 FROM 表B ...;

三、子查询

  • 定义:SQL语句中嵌套SELECT语句,外部语句可为INSERT/UPDATE/DELETE/SELECT。
  • 分类
    • 标量子查询:返回单个值,常用操作符有=、<、>等。
    • 列子查询:返回一列,常用操作符有IN、NOT IN、ANY、SOME、ALL。
    • 行子查询:返回一行,常用操作符有=、<、>、IN、NOT IN。
    • 表子查询:返回多行多列,常用操作符有IN。

四、DISTINCT去重

  • 作用:去除查询结果中的重复行,确保每一行唯一。
  • 用法:可对单个列或多列进行去重操作,但使用时需注意性能影响,尽量避免在大数据集上使用。

五、练习案例

  • 涉及内连接、外连接、子查询等多种多表查询方式的应用,如查询员工信息及部门信息、查询特定条件的员工及其部门信息、查询员工工资等级、查询部门平均工资

 

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

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

相关文章

深度学习的原理和应用

一、深度学习的原理 深度学习是机器学习领域的一个重要分支&#xff0c;其原理基于多层神经网络结构和优化算法。以下是深度学习的核心原理&#xff1a; 多层神经网络结构&#xff1a;深度学习模型通常由多层神经元组成&#xff0c;这些神经元通过权重和偏置相互连接。输入数据…

Domain Adaptation(李宏毅)机器学习 2023 Spring HW11 (Boss Baseline)

1. 领域适配简介 领域适配是一种迁移学习方法,适用于源领域和目标领域数据分布不同但学习任务相同的情况。具体而言,我们在源领域(通常有大量标注数据)训练一个模型,并希望将其应用于目标领域(通常只有少量或没有标注数据)。然而,由于这两个领域的数据分布不同,模型在…

netty请求行超出长度

说明&#xff1a;记录一次使用Netty异常&#xff0c;如下&#xff1a; 错误信息&#xff1a;An HTTP line is larger than 4096 bytes. 场景 项目是微服务架构&#xff0c;在使用Netty转发请求到其他服务的时候报了这个错误。因为该请求是GET方式&#xff0c;其中有个参数值是…

CES Asia 2025科技盛宴,AI智能体成焦点

2025第七届亚洲消费电子技术展&#xff08;CES Asia赛逸展&#xff09;将在北京拉开帷幕&#xff0c;AI智能体有望成为展会的核心亮点。 深圳市人工智能行业协会发文表示全力支持CES Asia 2025&#xff08;赛逸展&#xff09;&#xff0c;称其为人工智能领域的创新发展提供了强…

linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包

关于文件的关键词 创建 touch 删除 rm 复制 cp 权限 chmod 移动 mv 查看内容 cat(全部); head(前10行); tail(末尾10行); more,less 查找 find 压缩 gzip ; bzip 打包 tar 编辑 sed 创建文件 格式&#xff1a; touch 文件名 删除文件 复制文件 移动文件 查看文…

【计算机网络】lab3 802.11 (无线网络帧)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…

机器人碳钢去毛刺,用大扭去毛刺主轴可轻松去除

在碳钢精密加工的最后阶段&#xff0c;去除毛刺是确保产品质量的关键步骤。面对碳钢这种硬度较高的材料&#xff0c;采用大扭矩的SycoTec去毛刺主轴&#xff0c;成为了行业内的高效解决方案。SycoTec作为精密加工领域的领军品牌&#xff0c;其生产的高速电主轴以其卓越的性能&a…

【漫话机器学习系列】042.提前停止训练的优势(Early Stopping Advantages)

提前停止训练&#xff08;Early Stopping&#xff09;的优势 提前停止是一种有效的正则化技术&#xff0c;在训练模型时通过监控验证集的性能来决定训练的结束点&#xff0c;从而避免过拟合。以下是提前停止的主要优势&#xff1a; 1. 防止过拟合 提前停止通过在验证集性能开…

ROS2快速入门0--节点

0:安装 wget http://fishros.com/install -O fishros && . fishros1:运行第一个机器人 ros2 run turtlesim turtlesim_node使用方向健进行控制(在另一个终端) ros2 run turtlesim turtle_teleop_key 2原理解析 打开另一个终端-->输入rqt-->Plugins-->Intr…

10.STM32F407ZGT6-内部温度传感器

参考&#xff1a; 1.正点原子 前言&#xff1a; 本笔记的主要目的和意义就是&#xff0c;再次练习ADC的使用。 32.1 内部温度传感器简介 STM32F407 有一个内部的温度传感器&#xff0c;可以用来测量 CPU 及周围的温度(TA)。对于STM32F407 系列来说&#xff0c;该温度传感器在…

新车月交付突破2万辆!小鹏汽车“激活”智驾之困待解

首次突破月交付2万辆规模的小鹏汽车&#xff0c;稳吗&#xff1f; 本周&#xff0c;高工智能汽车研究院发布的最新监测数据显示&#xff0c;2024年11月&#xff0c;小鹏汽车在国内市场&#xff08;不含出口&#xff09;交付量&#xff08;上险口径&#xff0c;下同&#xff09…

【2024年华为OD机试】 (A卷,100分)- 租车骑绿岛(Java JS PythonC/C++)

一、问题描述 题目描述 部门组织绿岛骑行团建活动。租用公共双人自行车&#xff0c;每辆自行车最多坐两人&#xff0c;最大载重 M。 给出部门每个人的体重&#xff0c;请问最多需要租用多少双人自行车。 输入描述 第一行两个数字 m、n&#xff0c;分别代表自行车限重&#…

AI在零售行业中的应用:提升顾客体验与运营效率

你知道吗&#xff1f;零售行业正悄悄发生着一场革命&#xff01;AI正在改变我们的购物方式&#xff0c;提升体验的同时&#xff0c;还让商家们的运营更高效&#xff01; 1、个性化推荐 AI通过分析你的购物历史和兴趣&#xff0c;精准推荐你喜欢的商品&#xff0c;再也不怕刷到…

人才选拔中,如何优化面试流程

在与某大型央企的深入交流中&#xff0c;随着该企业的不断壮大与业务扩张&#xff0c;对技术人才的需求急剧上升&#xff0c;尽管企业加大了招聘力度并投入了大量资源&#xff0c;但招聘成效却不尽如人意。经过项目组细致调研与访谈&#xff0c;问题的根源逐渐浮出水面&#xf…

Deepin20.9 搭建 JDK 8 开发环境(VS Code)

一、安装指令 sudo apt-get install openjdk-8-jdk 二、切换 java 版本&#xff08;可选&#xff09; sudo update-alternatives --config java sudo update-alternatives --config javac sudo update-alternatives --config javadoc三、查看 java 与 javac 的版本 jav…

可靠的人形探测,未完待续(III)

一不小心&#xff0c;此去经年啊。问大家新年快乐&#xff01; 那&#xff0c;最近在研究毫米波雷达模块嘛&#xff0c;期望用在后续的产品中&#xff0c;正好看到瑞萨的活动送板子&#xff0c;手一下没忍住。 拿了板子就得干活咯&#xff0c;我一路火花带闪电&#xff0c;开整…

论文笔记:FDTI: Fine-grained Deep Traffic Inference with Roadnet-enriched Graph

2023 PKDD 1 intro 一些交通预测下游任务对预测结果的粒度非常敏感&#xff0c;例如交通信号控制、拥堵发现和路径规划 然而&#xff0c;现有的深度学习方法主要关注粗粒度的交通数据&#xff0c;而在细粒度设置下利用深度学习方法解决交通预测任务的研究仍未被探索在细粒度设…

如何BugReport和PowerMonitor图形结合分析功耗问题

一、什么是BugReport和PowerMonitor图形结合呢&#xff1f; Battery Historian是支持PowerMonitor电流图显示的&#xff0c;具体显示效果如下&#xff1a;我们移动鼠标到PowerMonitor的电流波形时就会显示这个时刻的电流情况。 BugReport和PowerMonitor图形结合好处&#xff…

外部获取nVisual所在层级方法

Iframe嵌入nVisual&#xff0c;在iframe渲染完成之后&#xff0c;以后通过增加window.addEventListener()方法监听message事件&#xff0c;来获取nvisual当前的所在层级以及所选中的节点列表以及线缆列表。 nVisualPatrolDiagramIdList 变量是获取nVisual当前所在的层级的ID值…

UI自动化测试框架playwright--初级入门

一、背景&#xff1a;UI自动化的痛点&#xff1a; 1、设计脚本耗时&#xff1a; 需要思考要如何模拟用户的操作&#xff0c;如何触发页面的事件&#xff0c;还要思考如何设计脚本&#xff0c;定位和操作要交互的元素、路径、位置&#xff0c;再编写代码逻辑&#xff0c;往复循…