4.多表查询
SQL 多表查询:数据整合与分析的强大工具
文章目录
- SQL 多表查询:数据整合与分析的强大工具
- 一、 多表查询概述
- 1.1 为什么需要多表查询
- 1.2 多表查询的基本原理
- 二、 多表查询关系
- 2.1 一对一关系(One-to-One)
- 示例:
- 2.2 一对多关系(One-to-Many)
- 示例:
- 2.3 多对多关系(Many-to-Many)
- 示例:
- 三、 多表查询分类
- 3.1 连接查询(JOIN)
- 3.2 子查询
- 3.3 连接查询与子查询的比较
- 四、详细介绍
- 4.1 内连接的查询语法
- 1. 隐式内连接(Implicit Join)
- 2. 显式内连接(Explicit Join)
- 3. 隐式内连接与显式内连接的区别
- 4.2 外连接的查询语法
- 1. 左外连接(Left Outer Join)
- 2. 右外连接(Right Outer Join)
- 3. 左外连接与右外连接的区别
- 4.3 自连接的查询语法
- 自连接的语法:
- 示例:
- 自连接的应用场景
- 4.3.1 自连接与内连接的关系
- 4.4 联合查询(Union)的查询语法
- 1. UNION 和 UNION ALL 的区别
- 2. 联合查询的基本语法:
- 3. 示例
- 4.5 子查询的查询语法
- 1. 子查询的分类(按返回结果类型)
- ① 标量子查询(Scalar Subquery)
- ② 列子查询(Column Subquery)
- ③ 行子查询(Row Subquery)
- ④ 表子查询(Table Subquery)
- 2. 子查询的使用位置
- 3. 子查询注意事项
- 五、总结
在关系型数据库中,数据通常被组织在多个表中。这种表的分离有助于减少冗余并提高数据的管理效率。然而,在实际应用中,往往需要对多个表中的数据进行整合查询,来获得更完整的信息。这时候,多表查询(Join)就显得至关重要。本文将详细介绍 SQL 中常见的多表查询类型,并通过实际示例帮助大家理解如何高效地利用这些查询方法。
一、 多表查询概述
多表查询 是指从多个表中获取数据并将其结合在一起的查询。数据库中的表通常是通过某些共享字段(如主键和外键)关联的,进行多表查询时,我们通过这些关系将不同表的数据合并为一个结果集。多表查询在数据分析和报告中非常常见,能够帮助我们在复杂的数据库结构中提取出有意义的、综合性的数据。
1.1 为什么需要多表查询
多表查询的需求通常来源于以下几个方面:
- 数据分布:在实际的数据库设计中,为了减少冗余、提高数据的组织性,往往将数据分散存储在不同的表中。例如,用户信息和订单信息一般存储在不同的表中,因此需要通过多表查询来关联这些表中的数据。
- 数据分析:多表查询可以帮助我们跨表分析数据。例如,在用户表和订单表之间进行连接,能够帮助我们分析每个用户的订单情况,甚至统计用户的消费金额。
- 简化复杂操作:多表查询能将复杂的操作简化,避免对每个表单独查询并手动组合数据。
1.2 多表查询的基本原理
在 SQL 中,进行多表查询时,常用的方式是使用 JOIN 操作符。通过 JOIN,我们可以指定不同表之间的连接条件,进而获得跨多个表的联合数据。多表查询的基本原理就是将一个表中的数据与另一个表中的数据按照某种条件进行匹配。
二、 多表查询关系
在关系型数据库中,数据通常存储在多个表中。每个表都有自己的数据字段和记录,这些表之间可能存在某种关系。理解表之间的关系对于设计和执行多表查询至关重要。常见的多表查询关系有以下几种:
2.1 一对一关系(One-to-One)
描述:在一对一关系中,一个表的每条记录只能与另一个表的单条记录关联。这种关系通常用于将表中的数据拆分到不同的表中,以提高数据的管理效率或对隐私数据的隔离。
示例:
假设有两个表:users(用户信息表)和 user_profiles(用户详细资料表),每个用户只对应一条详细资料。
SELECT users.name, user_profiles.profile_picture
FROM users
INNER JOIN user_profiles ON users.id = user_profiles.user_id;
在此示例中,users 表和 user_profiles 表通过 id 和 user_id 进行连接,并且每个用户只能拥有一条详细资料。
2.2 一对多关系(One-to-Many)
描述:在一对多关系中,一个表中的一条记录可以与另一个表中的多条记录相关联。这是最常见的表之间的关系类型,例如,一个用户可以有多个订单,或者一个产品可以有多个评论。
示例:
假设有两个表:users(用户信息表)和 orders(订单表),每个用户可以拥有多个订单。
SELECT users.name, orders.order_id, orders.order_date
FROM users
INNER JOIN orders ON users.id = orders.user_id;
在这个例子中,users 表中的一条记录可能与 orders 表中的多条记录关联。
2.3 多对多关系(Many-to-Many)
描述:在多对多关系中,一个表中的多条记录可以与另一个表中的多条记录关联。这种关系通常通过第三方表来实现,该表包含两个表之间的外键。
示例:
假设有三个表:students(学生表)、courses(课程表)和 enrollments(注册表)。每个学生可以注册多门课程,而每门课程也可以有多个学生。
SELECT students.name, courses.course_name
FROM students
INNER JOIN enrollments ON students.id = enrollments.student_id
INNER JOIN courses ON enrollments.course_id = courses.id;
在这个例子中,students 表和 courses 表之间没有直接的关系,而是通过 enrollments 表来建立连接。每个学生可以注册多门课程,每门课程也可以有多个学生。
三、 多表查询分类
多表查询可以根据查询的方式分为两类:
3.1 连接查询(JOIN)
连接查询是通过将两个或多个表中的数据连接在一起,来获取相关的信息。连接查询可以分为两种主要类型:
- 内连接(INNER JOIN):返回符合条件的两个表中交集部分的数据。即只返回那些在两个表中都存在匹配项的记录。
- 外连接(OUTER JOIN):返回两个表的所有数据,并且包括左表和右表中没有匹配项的记录,右表或左表中的没有匹配项的列会显示为
NULL。外连接又可以细分为以下几种:- 左外连接(LEFT OUTER JOIN):查询左表(第一个表)所有数据,以及两个表中交集部分的数据。右表中没有匹配项的记录会显示为
NULL。 - 右外连接(RIGHT OUTER JOIN):查询右表(第二个表)所有数据,以及两个表中交集部分的数据。左表中没有匹配项的记录会显示为
NULL。
- 左外连接(LEFT OUTER JOIN):查询左表(第一个表)所有数据,以及两个表中交集部分的数据。右表中没有匹配项的记录会显示为
- 自连接(SELF JOIN):当查询表自身时,通常使用自连接。自连接需要给表起一个别名,确保连接时能够区分表的不同实例。
3.2 子查询
子查询 是指在查询语句中嵌套另一个查询语句。子查询可以用来进一步过滤或处理数据,通常嵌套在 WHERE 或 FROM 子句中。
3.3 连接查询与子查询的比较
- 连接查询:通过使用
JOIN关键字,可以非常高效地将多个表的数据合并为一条记录,尤其适用于表之间有关系时。 - 子查询:子查询适用于那些不能直接通过连接查询获取的数据,或者在某些场合下可以有效简化查询逻辑。
四、详细介绍
4.1 内连接的查询语法
在数据库查询中,内连接(Inner Join)是一种常见的操作,它用于将两张或多张表中的相关数据通过某些字段(通常是相等关系)进行匹配和连接。在 SQL 查询中,内连接有两种常见的写法:隐式内连接和显式内连接。这两种写法各有其适用场景,今天我们将详细介绍这两种语法,并解析它们的区别。
1. 隐式内连接(Implicit Join)
隐式内连接较为简洁,使用 WHERE 子句来指定连接条件。这种方式通过在 FROM 子句中列出多个表,并通过 WHERE 子句来定义匹配条件。虽然这种方式比较简洁,但在复杂查询中会使代码变得不够清晰,尤其是涉及多个连接条件时。
隐式内连接的语法:
SELECT 字段列表 FROM 表1, 表2 WHERE 条件;
在这个语法中,表1 和 表2 是需要连接的表,而 条件 则是连接的依据,通常是通过某个字段的相等关系来匹配记录。
示例: 假设我们有两张表:Customers(客户表)和 Orders(订单表),我们需要获取客户的姓名和他们购买的商品,连接条件是 CustomerID。
SELECT Customers.Name, Orders.Product
FROM Customers, Orders
WHERE Customers.CustomerID = Orders.CustomerID;
解释:
Customers表和Orders表通过CustomerID字段进行连接。WHERE子句指定了连接条件:Customers.CustomerID = Orders.CustomerID。- 只有在两个表中都存在匹配的
CustomerID,该客户及其订单信息才会出现在查询结果中。
2. 显式内连接(Explicit Join)
显式内连接通过 INNER JOIN 和 ON 子句明确指定连接条件。相比隐式连接,显式连接更为清晰,尤其在多个表之间需要进行连接时,它能够清楚地表明各个表之间的关系。
显式内连接的语法:
SELECT 字段列表
FROM 表1
INNER JOIN 表2
ON 表1.字段 = 表2.字段;
在这种语法中,INNER JOIN 关键字表示连接方式是内连接,ON 子句指定了连接条件,即两个表中用于匹配的字段。
示例: 我们依旧使用 Customers 和 Orders 表,获取客户和他们购买的商品信息:
SELECT Customers.Name, Orders.Product
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
解释:
INNER JOIN关键字指定了连接方式是内连接。ON子句指定了连接条件:Customers.CustomerID = Orders.CustomerID,即CustomerID字段相等时,返回匹配的记录。- 只有当
Customers表和Orders表中都有对应的CustomerID时,才会返回结果。
3. 隐式内连接与显式内连接的区别
- 清晰度: 显式内连接通过
INNER JOIN和ON子句明确指出了连接条件,通常比隐式内连接更容易理解和维护。尤其在连接多个表时,显式连接的可读性和逻辑性更强。 - 简洁性: 隐式内连接语法较为简洁,适用于简单的查询。不过,在涉及多个连接或复杂查询时,隐式连接可能会导致代码不够直观。
- 维护性: 显式内连接由于结构清晰,更容易进行修改和调试。在编写复杂的 SQL 查询时,推荐使用显式内连接。
4.2 外连接的查询语法
外连接(Outer Join)是一种 SQL 查询中常用的连接操作,它与内连接(Inner Join)的不同之处在于:外连接不仅返回两个表中匹配的记录,还会返回某一表中没有匹配的记录,并将其与另一个表的空值(NULL)一起展示。外连接主要有三种类型:左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。在本节中,我们将重点介绍左外连接和右外连接的语法,并解析它们的区别。
1. 左外连接(Left Outer Join)
左外连接返回左表(即查询中的第一个表)中的所有记录,即使在右表中没有匹配的记录。对于右表中没有匹配的记录,查询结果中的相关字段会返回 NULL 值。
左外连接的语法:
SELECT 字段列表
FROM 表1
LEFT [OUTER] JOIN 表2
ON 表1.字段 = 表2.字段;
在这个语法中,LEFT JOIN 或 LEFT OUTER JOIN 都表示左外连接,ON 子句指定了连接条件。
示例: 假设我们有两张表:Customers 和 Orders,我们需要查询所有客户的姓名和他们的订单,如果某个客户没有订单,则返回 NULL 作为订单信息。
SELECT Customers.Name, Orders.Product
FROM Customers
LEFT OUTER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
解释:
- 这个查询将返回所有客户的信息,包括那些没有订单的客户。对于没有订单的客户,查询结果中的
Product字段将显示为NULL。
2. 右外连接(Right Outer Join)
右外连接与左外连接类似,只不过它返回的是右表(即查询中的第二个表)中的所有记录,即使左表中没有匹配的记录。对于左表中没有匹配的记录,查询结果中的相关字段会返回 NULL 值。
右外连接的语法:
SELECT 字段列表
FROM 表1
RIGHT [OUTER] JOIN 表2
ON 表1.字段 = 表2.字段;
在这个语法中,RIGHT JOIN 或 RIGHT OUTER JOIN 表示右外连接,ON 子句指定了连接条件。
示例: 假设我们依旧使用 Customers 和 Orders 表,我们希望查询所有订单的信息,包括那些没有客户信息的订单。若某个订单没有客户对应,则返回 NULL 作为客户姓名。
SELECT Customers.Name, Orders.Product
FROM Customers
RIGHT OUTER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
解释:
- 这个查询将返回所有订单的信息,包括那些没有客户信息的订单。对于没有客户的订单,查询结果中的
Name字段将显示为NULL。
3. 左外连接与右外连接的区别
- 左外连接 返回左表的所有记录,包括那些没有右表匹配的记录,右表的字段会显示为
NULL。 - 右外连接 返回右表的所有记录,包括那些没有左表匹配的记录,左表的字段会显示为
NULL。 - 这两者的主要区别在于返回的记录来源。左外连接侧重于左表的完整性,右外连接则侧重于右表的完整性。
4.3 自连接的查询语法
自连接(Self Join)是一种特殊的连接操作,它将同一张表与自己进行连接。通常,表在查询中被引用两次,一个用于作为左表,另一个作为右表。在 SQL 中执行自连接时,必须使用别名(Alias)来区分同一张表的不同实例。自连接可以是内连接(Inner Join)也可以是外连接(Outer Join),具体取决于你需要的查询结果。
自连接的语法:
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 别名A.字段 = 别名B.字段;
在这个语法中:
表A是需要进行自连接的表,别名A和别名B用于区分表的两个不同实例。JOIN可以是内连接(INNER JOIN)或外连接(LEFT OUTER JOIN,RIGHT OUTER JOIN),具体取决于查询的需求。ON子句指定了连接条件,即两个表实例之间如何匹配字段。
示例:
假设我们有一张 Employees(员工表)表,包含 EmployeeID(员工ID)和 ManagerID(经理ID),我们希望查询每位员工及其经理的姓名。此时,Employees 表既是查询的左表也是右表,因此我们需要使用自连接。
SELECT E1.EmployeeName AS Employee, E2.EmployeeName AS Manager
FROM Employees E1
INNER JOIN Employees E2
ON E1.ManagerID = E2.EmployeeID;
解释:
E1和E2是Employees表的两个别名,E1代表员工,E2代表经理。- 通过
INNER JOIN将E1.ManagerID和E2.EmployeeID进行匹配,从而将员工与他们的经理进行关联。
自连接的应用场景
自连接通常用于以下场景:
- 层级结构查询: 比如在包含员工和经理的表中,通过自连接查找每个员工的经理。
- 关联数据: 如果一个表中的记录需要与同一表中的其他记录进行比较或匹配,自连接是一种常用的方法。
4.3.1 自连接与内连接的关系
自连接本质上是内连接的一种特殊形式,只不过它是将表与自身进行连接。因此,自连接可以使用内连接或者外连接,具体取决于数据的匹配要求。
当然可以,延续之前章节风格,下面是 联合查询(Union) 的内容整理:
4.4 联合查询(Union)的查询语法
联合查询(UNION)用于将多个 SELECT 查询的结果合并为一个总的结果集合。它通常用于从结构相同(列数和类型一致)的多个表中获取数据,并将这些结果整合展示。
1. UNION 和 UNION ALL 的区别
UNION:自动去重,返回的结果集中不包含重复的行。UNION ALL:不去重,保留所有结果,包括重复行,效率通常更高。
2. 联合查询的基本语法:
SELECT 字段列表 FROM 表A
UNION [ALL]
SELECT 字段列表 FROM 表B;
注意:两个
SELECT查询的 字段数量、字段顺序和数据类型 必须保持一致。
UNION ALL会将全部的数据直接合并在一起,UNION会对合并之后的数据去重。
3. 示例
假设我们有两个表:DomesticOrders(国内订单)和 InternationalOrders(国际订单),我们希望获取所有订单的编号和客户姓名:
SELECT OrderID, CustomerName FROM DomesticOrders
UNION
SELECT OrderID, CustomerName FROM InternationalOrders;
- 使用
UNION,重复的订单编号将只显示一次。
如果我们希望显示所有订单(包括重复记录):
SELECT OrderID, CustomerName FROM DomesticOrders
UNION ALL
SELECT OrderID, CustomerName FROM InternationalOrders;
4.5 子查询的查询语法
子查询(Subquery),又称为嵌套查询(Nested Query),是指将一个 SELECT 查询语句嵌套在另一个 SQL 语句内部的查询方式。它通常用于在主查询(外部查询)中提供中间结果,供其进行进一步过滤或判断。
例如:
SELECT * FROM t1
WHERE column1 = (SELECT column1 FROM t2
);
子查询可以出现在 SELECT、FROM、WHERE、HAVING 等位置,并且外部语句不限于 SELECT,也可以是 INSERT、UPDATE、DELETE 等。
| 类型 | 返回结果 | 常见关键词 |
|---|---|---|
| 标量子查询 | 单行单列 | =, >, < 等 |
| 列子查询 | 多行一列 | IN, ANY, ALL |
| 行子查询 | 一行多列 | =, IN |
| 表子查询 | 多行多列(临时表) | 作为 FROM 的子表 |
1. 子查询的分类(按返回结果类型)
根据子查询返回结果的不同,可将其分为以下几种类型:
① 标量子查询(Scalar Subquery)
- 返回单个值(单行单列)。
- 常用于
WHERE、SELECT、SET等语句中。
SELECT Name, Salary
FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees
);
② 列子查询(Column Subquery)
- 返回单列多行。
- 通常结合
IN、ANY、ALL等关键字使用。
SELECT Name
FROM Employees
WHERE DepartmentID IN (SELECT ID FROM Departments WHERE Location = 'Beijing'
);
③ 行子查询(Row Subquery)
- 返回单行多列。
- 通常与
=,<,>,IN等配合使用。
SELECT *
FROM Products
WHERE (CategoryID, SupplierID) = (SELECT CategoryID, SupplierID FROM Products WHERE ProductID = 10
);
④ 表子查询(Table Subquery)
- 返回多行多列,类似于一张临时表。
- 常用在
FROM子句中,作为派生表(Derived Table)。
SELECT DeptName, AvgSalary
FROM (SELECT DepartmentID, AVG(Salary) AS AvgSalaryFROM EmployeesGROUP BY DepartmentID
) AS SubDept
JOIN Departments ON SubDept.DepartmentID = Departments.ID;
2. 子查询的使用位置
| 位置 | 说明 |
|---|---|
WHERE 子句 | 用于作为条件过滤 |
FROM 子句 | 用作虚拟表,供外层查询使用 |
SELECT 子句 | 直接嵌入字段计算中 |
HAVING 子句 | 聚合后再进行子查询过滤 |
3. 子查询注意事项
- 子查询返回值数量要与外部语句逻辑匹配:
- 标量子查询只能返回一行一列。
- 多行结果需使用
IN、EXISTS等。
- 子查询性能可能较低,复杂嵌套应考虑改为
JOIN。 - 子查询可以嵌套多层,但为保证可读性不建议超过两层。
五、总结
SQL 的多表查询是数据分析和数据库管理中非常强大的工具。通过多表查询,我们能够轻松地跨多个表整合数据,从而获取更丰富的信息。无论是通过 JOIN 操作将表连接起来,还是使用 子查询 进行数据处理,SQL 提供的这些功能使得我们可以灵活地应对复杂的数据库结构和查询需求。
在本篇博客中,我们深入探讨了多表查询的几种常见关系类型(如一对一、一对多和多对多关系),并详细介绍了不同类型的 JOIN 查询(如内连接、外连接、左外连接和右外连接)。每种连接方式都有其特定的使用场景和优缺点。我们还对 子查询 和 自连接 进行了讨论,强调了它们在实际应用中的重要性和有效性。
SQL 多表查询不仅仅是数据提取的工具,它还极大地简化了复杂的数据分析过程,减少了冗余操作。掌握这些查询技巧,不仅能帮助你更高效地操作数据库,也能在数据分析过程中提供更多的洞察力。
无论你是数据库开发者、数据分析师,还是 SQL 新手,理解并熟练运用 SQL 多表查询都将大大提升你的工作效率和数据处理能力。希望通过本篇文章,你能够更深入地理解多表查询的各种方式,并在实际应用中充分利用这些强大的工具。
子查询 进行数据处理,SQL 提供的这些功能使得我们可以灵活地应对复杂的数据库结构和查询需求。
在本篇博客中,我们深入探讨了多表查询的几种常见关系类型(如一对一、一对多和多对多关系),并详细介绍了不同类型的 JOIN 查询(如内连接、外连接、左外连接和右外连接)。每种连接方式都有其特定的使用场景和优缺点。我们还对 子查询 和 自连接 进行了讨论,强调了它们在实际应用中的重要性和有效性。
SQL 多表查询不仅仅是数据提取的工具,它还极大地简化了复杂的数据分析过程,减少了冗余操作。掌握这些查询技巧,不仅能帮助你更高效地操作数据库,也能在数据分析过程中提供更多的洞察力。
无论你是数据库开发者、数据分析师,还是 SQL 新手,理解并熟练运用 SQL 多表查询都将大大提升你的工作效率和数据处理能力。希望通过本篇文章,你能够更深入地理解多表查询的各种方式,并在实际应用中充分利用这些强大的工具。
相关文章:
4.多表查询
SQL 多表查询:数据整合与分析的强大工具 文章目录 SQL 多表查询:数据整合与分析的强大工具一、 多表查询概述1.1 为什么需要多表查询1.2 多表查询的基本原理 二、 多表查询关系2.1 一对一关系(One-to-One)示例: 2.2 一…...
MCP 基于 TypeScript 的完整示例,包含stdio、sse多种用法和调试,对于构建自己的API工具链很有用
typescript-mcp-demo 这是一个基于 Model Context Protocol (MCP) 的 TypeScript 示例项目,展示了如何创建一个简单的 MCP 服务器,包含基本的工具(tools)和资源(resources)功能。 官网:https:…...
位运算知识
位运算是一种直接对整数在内存中的二进制位进行操作的运算方式。计算机中的整数是以二进制形式存储的,位运算通过操作这些二进制位来实现高效的计算。位运算通常比普通的算术运算更快,因为它直接作用于硬件层面。 以下是几种常见的位运算符及其功能&…...
mybatis高级查询:一对多配置,一次性查出主表和子表中的数据
一、MyBatis高级查询:一对多 MyBatis是一款强大的持久层框架,提供了多种方式来处理关联查询,其中包括一对一和一对多的情况。在本文中,我们将深入探讨一对多关联查询的实现方式。 在MyBatis中配置一对多关系通常涉及到associati…...
美团2024年春招第一场笔试 C++
目录 1,小美的平衡矩阵 2,小美的数组询问 3,小美的MT 4,小美的朋友关系 1,小美的平衡矩阵 【题目描述】 给定一个n*n的矩阵,该矩阵只包含数字0和1。对于 每个i(1<i<n),求在该矩阵中&am…...
XHTMLConverter把docx转换html报java.lang.NullPointerException异常
一.报错 1.报错信息 org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerExceptionat org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLConverter.java:77)at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.doConve…...
OpenCV 图形API(52)颜色空间转换-----将 NV12 格式的图像数据转换为 RGB 格式的图像
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从 NV12 (YUV420p) 色彩空间转换为 RGB。该函数将输入图像从 NV12 色彩空间转换到 RGB。Y、U 和 V 通道值的常规范围是 0 到 255。 输出图…...
pojovoDto等概念
Java 中的数据模型概念 POJO (Plain Old Java Object) POJO 是最简单的 Java 对象,不依赖于特定的框架,不实现任何特殊的接口,也不继承特定的类。 特点 具有无参构造函数属性使用 private 修饰提供公共的 getter 和 setter 方法可序列化 …...
COdeTop-206-反转链表
题目 206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 …...
线段树讲解(小进阶)
目录 前言 一、线段树知识回顾 线段树区间加减 区间修改维护: 区间修改的操作: 区间修改update: 线段树的区间查询 区间查询: 区间查询的操作: 递归查询过程: 区间查询query: 代码&…...
4082P 信号/频谱分析仪
——新利通仪器仪表—— 4082P丨信号/频谱分析仪 2Hz~110GHz Ceyear 4082系列信号/频谱分析仪在显示平均噪声电平、相位噪声、互调抑制、动态范围、幅度精度和测试速度等方面具备极佳的射频性能。具备强大的频谱分析、符合标准的功率测量套件、I/Q分析、瞬态分析…...
夏季跑步注意
夏季跑步注意 医学专家警示:大众跑者需以安全为先,警惕高温环境下“盲目冲刺”的风险。一些事件再次印证马拉松适宜气温为6-15℃,超过20℃时需主动降速并增加补水量。 所以建议每一位跑友,为了健康的跑步,每年除了做…...
openharmony5.0.0中C++公共基础类测试-线程相关(一)
C公共基础类测试及源码剖析 延续传统,show me the code,除了给出应用示例还重点分析了下openharmony中的实现。 简介 openharmony中提供了C公共基础类库,为标准系统提供了一些常用的C开发工具类,本文分析其实现,并给…...
TDengine 数据订阅设计
简介 数据订阅作为 TDengine 的一个核心功能,为用户提供了灵活获取所需数据的能力。通过深入了解其内部原理,用户可以更加有效地利用这一功能,满足各种实时数据处理和监控需求。 基本概念 主题 与 Kafka 一样,使用 TDengine 数…...
python:mido 提取 midi文件中某一音轨的音乐数据
pip install mido 使用 mido库可以方便地处理 MIDI 文件,提取其中音轨的音乐数据。 1.下面的程序会读取指定的 MIDI 文件,并提取指定编号音轨的音乐数据,主要包括音符事件等信息。 编写 mido_extract.py 如下 # -*- coding: utf-8 -*- &…...
vue3 中推荐使用的页面布局方式
1、Flexbox布局 原理 Flexbox(弹性盒子布局模型)提供了一种更加高效的方式来对容器中的子元素进行布局、对齐和分配空间。它能够根据容器的大小和子元素的内容自动调整布局,非常适合一维布局(水平或垂直方向)。 优…...
URP-UGUI交互功能实现
一、非代码层面实现交互(SetActive) Button :在OnClick()中添加SetActive方法(但是此时只首次有效) Toggle :在OnClick()中添加动态的SetActive方法 &#…...
UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025
UniGoal的提出了一个通用的零样本目标导航框架,能够统一处理多种类型的导航任务 (如对象类别导航、实例图像目标导航和文本目标导航),而无需针对特定任务进行训练或微调。 它的特点是 图匹配与多阶段探索策略!&#x…...
通过Quartus II实现Nios II编程
目录 一、认识Nios II二、使用Quartus II 18.0Lite搭建Nios II硬件部分三、软件部分四、运行项目 一、认识Nios II Nios II软核处理器简介 Nios II是Altera公司推出的一款32位RISC嵌入式处理器,专门设计用于在FPGA上运行。作为软核处理器,Nios II可以通…...
Linux/AndroidOS中进程间的通信线程间的同步 - IPC方式简介
前言 从来没有总结过Linux/Android系统中进程间的通信方式和线程间的同步方式,这个专栏就系统总结讨论一下。首先从标题可知,讨论问题的主体是进程和线程、通信和同步;在这里默认你理解进程和线程的区别。通信和同步有什么概念上的区别&…...
Windows:注册表配置应用
0、简介 本篇博客记录一下,日常的系统注册表配置选项,以防再次遇到问题不知如何解决。 1、开机启动配置 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run :: 此位置存储了所有用户登录时需要启动的程序。 在该项下新建字符串值&#…...
升级xcode16之后react-native-zip-archive不兼容,unsupported option ‘-G‘
问题 升级xcode到16之后,xcode build报错:unsupported option -G for target x86_64-apple-ios13.4-simulator (in target RNZipArchive from project Pods) 出现原因 在 React Native 项目中,当你将 Xcode 升级到 16 后,可能会遇到 RNZipArchive 相关的编译错误,特别是…...
WebXR教学 05 项目3 太空飞船小游戏
准备工作 自动创建 package.json 文件 npm init -y 安装Three.js 3D 图形库,安装现代前端构建工具Vite(用于开发/打包) npm install three vite 启动 Vite 开发服务器(推荐)(正式项目开发) …...
网页在浏览器中显示的原理(简要)
网页在浏览器中显示的过程是一个复杂的多阶段流程。 1. 输入URL并发起请求 用户在地址栏输入URL并回车 浏览器检查缓存(DNS缓存、页面缓存等) 如果没有缓存,通过DNS解析获取服务器IP地址 建立TCP连接(三次握手) 发…...
rl中,GRPO损失函数详解。
文章目录 **一、GRPO损失函数的设计背景****二、代码逐行解析****三、关键组件详解****1. 对数概率与KL散度计算****2. 优势值与策略梯度****3. 掩码与平均损失****四、训练动态与调参建议**在TRL(Transformer Reinforcement Learning)库中,GRPO(Group Relative Policy Opt…...
【Java面试笔记:基础】12.Java有几种文件拷贝方式?哪一种最高效?
在 Java 中,文件拷贝可以通过多种方式实现,不同方式的性能和适用场景有所差异。 1. Java 文件拷贝方式 传统 IO 方式 使用 FileInputStream 和 FileOutputStream,通过循环读取和写入数据实现文件拷贝。 示例代码: try (InputStream is = new FileInputStream("sou…...
【leetcode】3524 求出数组的X值1
题目链接 题目描述 给你一个正整数数组 nums 和一个正整数 k。 你可以对数组执行一次操作:移除不重叠的前缀和后缀(可以为空),留下一个连续非空子数组。 对于每一种留下的子数组,计算: (该子数组的乘积…...
达梦统计信息收集情况检查
查询达梦某个对象上是否有统计信息 select id,T_TOTAL,N_SMAPLE,N_DISTINCT,N_NULL,BLEVEL,N_LEAF_PAGES,N_LEAF_USED_PAGES,LAST_GATHERED from sysstats where id IN (select id from sysobjects where upper(name)upper(&objname));可能有系统对象,可以增加…...
1️⃣5️⃣three.js_GUI辅助调试器
15、GUI辅助调试器 3D虚拟工厂在线体验 GUI辅助调试器将原本需要修改代码调整参数并刷新页面的操作,简化为直接在GUI中实时调整,实现所见即所得的效果。 导入GUI 库 //引入GUI辅助调试器 import {GUI } from three/addons/libs/lil-gui.module.min.js创建GUI辅助调试器对象 c…...
【matlab】气泡图的应用
【matlab】气泡图的应用 .rtcContent { padding: 30px; } .lineNode {font-size: 12pt; font-family: "Times New Roman", Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; } clear load zb_equi.mat load …...
