【MySQL基础】高级查询

文章目录

    • 一、聚合函数:`COUNT`、`SUM`、`AVG`、`MIN`、`MAX`
        • 1. 统计总数:`COUNT`
        • 2. 计算总和:`SUM`
        • 3. 计算平均值:`AVG`
        • 4. 找最小值:`MIN`
        • 5. 找最大值:`MAX`
      • 综合使用聚合函数的例子
      • 小结
    • 二、分组查询——`GROUP BY` 和 `HAVING`
        • 1. 按组来统计——`GROUP BY`
        • 2. 为分组结果加条件——`HAVING`
        • `GROUP BY` 和 `HAVING` 的组合使用
      • 小结
    • 三、多表查询(JOIN)
      • 1、内连接(INNER JOIN)
        • 什么是内连接(INNER JOIN)
        • 例子:学生和课程表
        • 使用 INNER JOIN 查询
        • 内连接的应用场景
        • 小结
      • 2、外连接:LEFT JOIN 和 RIGHT JOIN
        • 什么是 LEFT JOIN 和 RIGHT JOIN
        • 举例:学生和课程表
        • 使用 LEFT JOIN 查询
        • 使用 RIGHT JOIN 查询
        • 总结
      • 3、交叉连接与自连接:CROSS JOIN 和 SELF JOIN
        • 什么是 CROSS JOIN(交叉连接)
        • 举个例子:颜色和尺寸的组合
        • 什么是 SELF JOIN(自连接)
        • 举个例子:查找员工的上下级关系
        • 总结
    • 四、子查询:单行、多行、嵌套子查询
        • 单行子查询
          • 举个例子:找出工资最高的人的名字
        • 多行子查询
          • 举个例子:找出工资高于某些特定职位的员工
        • 嵌套子查询
          • 举个例子:找到某部门工资最高的员工
      • 总结
    • 五、视图(VIEW)
        • 什么是视图
        • 创建视图:CREATE VIEW
          • 举个例子
        • 视图的优点
        • 更新视图里的数据
          • 举个例子
        • 删除视图:DROP VIEW
          • 删除视图的例子
      • 小结

在这里插入图片描述

高级查询的目的是让我们在操作数据库时,不仅能进行基本的增删改查,还可以处理更复杂的数据需求。通过高级查询,我们能够计算数据统计(聚合函数)、按条件分组(分组查询)、合并多张表中的数据(多表连接)、嵌套使用查询结果(子查询)、以及创建虚拟表(视图)。这些操作让我们能更高效地组织和查询信息,尤其在需要从大量数据中筛选特定信息或分析特定趋势时,非常有用。

一、聚合函数:COUNTSUMAVGMINMAX

聚合函数在数据库查询中非常有用,能让我们快速得到数据的总结和汇总结果。比如,想知道一群学生的平均年龄、总人数,甚至是年龄最大和最小的学生,这时候就需要聚合函数来帮忙了。MySQL 里有几个常见的聚合函数:COUNTSUMAVGMINMAX。我们来一一看看它们的用法。


1. 统计总数:COUNT

COUNT 函数用于计算记录的数量。比如,如果想知道 students 表中有多少个学生,可以用:

SELECT COUNT(*) AS total_students FROM students;

这个查询会返回一个结果,比如 total_students 是15,就代表我们有15个学生。

你还可以加条件,比如想知道年级是Junior的学生有多少个:

SELECT COUNT(*) AS juniors FROM students WHERE grade = 'Junior';

2. 计算总和:SUM

SUM 函数用于计算某一列值的总和。假设有一个 salary 列存放学生的兼职收入,想知道所有学生收入的总和,可以用:

SELECT SUM(salary) AS total_salary FROM students;

注意,SUM 只能对数值类型的列(比如 INTFLOAT)进行求和,不能对字符串求和哦。


3. 计算平均值:AVG

AVG 函数用于求平均值。比如,如果想知道学生的平均年龄,可以这样查询:

SELECT AVG(age) AS average_age FROM students;

假设 average_age 是 21,那就表示学生的平均年龄为 21 岁。

SUM 一样,AVG 也只能用于数值类型的列。


4. 找最小值:MIN

MIN 函数可以帮你找到某列中最小的值。比如,想知道学生中最小的年龄,可以用:

SELECT MIN(age) AS youngest_age FROM students;

查询结果是 youngest_age 等于 19,就表示最小的学生年龄是 19 岁。


5. 找最大值:MAX

MAX 函数和 MIN 相反,它返回某列中的最大值。比如,想知道学生中最高的年龄是多少岁,可以用:

SELECT MAX(age) AS oldest_age FROM students;

假设 oldest_age 的值是 24,那就说明年龄最大的学生是 24 岁。


综合使用聚合函数的例子

假如我们想要统计每个年级的学生人数、平均年龄和年龄范围,就可以把这些聚合函数组合起来:

SELECT grade,COUNT(*) AS num_students,        -- 统计每个年级的学生数量AVG(age) AS avg_age,             -- 计算每个年级的平均年龄MIN(age) AS youngest_age,        -- 找出每个年级最小的年龄MAX(age) AS oldest_age           -- 找出每个年级最大的年龄
FROM students
GROUP BY grade;

这个查询会按 grade 分组,返回每个年级的学生数量、平均年龄、最小年龄和最大年龄。比如输出:

gradenum_studentsavg_ageyoungest_ageoldest_age
Freshman519.81821
Sophomore420.52022
Junior321.32022
Senior2232324

这样,我们就对每个年级有了更深入的了解,是不是很方便?


小结

  • COUNT:用来统计记录数。
  • SUM:计算总和,只能用于数值。
  • AVG:计算平均值,只能用于数值。
  • MIN:找最小值,可以用于数值和字符串(如按字母顺序)。
  • MAX:找最大值,可以用于数值和字符串。

掌握这些聚合函数,可以让你更轻松地从数据中找到有用的信息。

二、分组查询——GROUP BYHAVING

在数据库查询中,有时我们不光需要单条记录,还需要对类别做统计,比如统计每个年级有多少人,或者每个班级的平均分。这时,GROUP BYHAVING 就是你不可或缺的好帮手了。它们让我们能按某列的值分组,再应用聚合函数(如 COUNTSUMAVG 等)得到更有意义的结果。


1. 按组来统计——GROUP BY

GROUP BY 的作用就是把数据分成一组一组的,并对每一组应用聚合函数。例如,假设我们想统计每个年级的学生人数。

例子:统计每个年级的学生数量

SELECT grade, COUNT(*) AS student_count 
FROM students
GROUP BY grade;

这个查询会按 grade 字段对 students 表进行分组,统计每个年级有多少人。

示例结果

gradestudent_count
Freshman5
Sophomore4
Junior3
Senior2

也就是说,GROUP BY 把数据按 grade 列的值分为几个组,每个年级的数据汇总在一起,再统计出每组中的记录数量。


2. 为分组结果加条件——HAVING

有时候,我们只想要满足某些条件的分组结果,比如只想知道人数大于 3 的年级。这时,就可以用 HAVING 来限定分组后的结果,它专门用来为分组后的结果加条件。

例子:只显示人数多于 3 的年级

SELECT grade, COUNT(*) AS student_count
FROM students
GROUP BY grade
HAVING student_count > 3;

这里,HAVING 条件作用于分组后的结果。假如结果中有几个年级的 student_count 大于 3,那么只会返回这些年级的数据:

gradestudent_count
Freshman5
Sophomore4

小提示:不同于 WHEREHAVING 是在分组和聚合之后起作用的,常用来筛选聚合结果。


GROUP BYHAVING 的组合使用

假如我们有以下需求:

  • 想知道每个年级中学生的平均年龄。
  • 只显示那些平均年龄大于 21 岁的年级。

查询语句

SELECT grade, AVG(age) AS avg_age
FROM students
GROUP BY grade
HAVING avg_age > 21;

在这个例子中,GROUP BY 把学生按年级分组,AVG(age) 计算每个年级的平均年龄,而 HAVING 则用来过滤平均年龄大于 21 的年级。

示例结果

gradeavg_age
Senior23
Junior21.5

小结

  • GROUP BY:把数据分组,可以配合聚合函数进行统计。
  • HAVING:为分组后的结果加条件,类似 WHERE,但 WHERE 是作用于单条记录,而 HAVING 是作用于分组后的结果。

掌握 GROUP BYHAVING,你可以轻松地按类别对数据进行统计、汇总,再为汇总后的结果加条件筛选出你想要的信息!

三、多表查询(JOIN)

1、内连接(INNER JOIN)

在实际的数据库操作中,我们常常需要从多个表中获取相关的数据。比如,有一个 students 表存着学生的信息,另一个 courses 表存着学生选课的信息。那么,如何把这两个表中的数据关联起来呢?这就是多表查询的作用,而 INNER JOIN 就是最常用的一种。


什么是内连接(INNER JOIN)

INNER JOIN 是一种只显示两个表中有匹配关系的记录的连接方式。可以理解为,如果我们要从两个表中找数据,INNER JOIN 会挑出在两个表中都有关联的那部分数据进行展示。

例子:学生和课程表

假设我们有两个表:

  1. students 表:记录每个学生的基本信息

    • student_id:学生ID
    • name:学生名字
    • age:学生年龄
  2. enrollments 表:记录每个学生选课的情况

    • student_id:学生ID(关联 students 表)
    • course_name:课程名称

假设表的数据是这样的:

students 表

student_idnameage
1张三20
2李四22
3王五21

enrollments 表

student_idcourse_name
1数学
1英语
2物理
3化学
3数学

我们现在想要查出每个学生选了哪些课。因为 enrollments 表和 students 表的 student_id 是关联的,所以我们可以用 INNER JOIN 来实现。

使用 INNER JOIN 查询
SELECT students.name, students.age, enrollments.course_name
FROM students
INNER JOIN enrollments ON students.student_id = enrollments.student_id;

解释:

  • FROM students:选择以 students 表为主表。
  • INNER JOIN enrollments ON students.student_id = enrollments.student_id:让 studentsenrollments 表通过 student_id 字段进行连接。
  • SELECT students.name, students.age, enrollments.course_name:指定要查询的字段,包括学生的名字、年龄和课程名称。

这个查询结果会返回以下表格:

nameagecourse_name
张三20数学
张三20英语
李四22物理
王五21化学
王五21数学

注意:如果 enrollments 表里某个 student_idstudents 表中找不到,或者反之,那么这条记录将不会被显示出来。这就是 INNER JOIN,它只显示两边都有匹配的记录

内连接的应用场景

内连接适合查询两个表之间有明确关联的数据。例如:

  • 查询员工的部门信息(employees 表和 departments 表)。
  • 查找订单的客户信息(orders 表和 customers 表)。
  • 查询学生的选课情况(如上例)。
小结
  • INNER JOIN 是用于获取两个表中都存在关联关系的记录
  • 连接条件常用 ON 关键字指定两个表的关联字段。
  • 如果某表中某行数据没有对应的另一表的记录,那么这行数据不会显示在结果中。

通过 INNER JOIN,我们能有效地把不同表的数据按需要关联起来,从而更方便地进行数据分析和管理。

2、外连接:LEFT JOIN 和 RIGHT JOIN

在多表查询中,有时候我们希望得到的数据不只是完全匹配的部分,还包括在一个表里有、但另一个表里没有的数据。这时候,LEFT JOINRIGHT JOIN 就派上用场了。它们可以帮我们找到不完全匹配的数据,满足我们更全面的数据需求。


什么是 LEFT JOIN 和 RIGHT JOIN
  • LEFT JOIN:以左边的表为主,显示左表中所有的数据,不论右表中有没有匹配项。
  • RIGHT JOIN:以右边的表为主,显示右表中所有的数据,不论左表中有没有匹配项。

这两种 JOIN 都叫“外连接”,因为它们不仅仅连接两表中的匹配数据,还会把没有匹配的数据包含进来,让查询结果更加全面。


举例:学生和课程表

还是用学生和选课的例子来理解 LEFT JOINRIGHT JOIN

  1. students 表:记录每个学生的信息。

    • student_id:学生ID
    • name:学生名字
  2. enrollments 表:记录学生选课情况。

    • student_id:学生ID(关联 students 表)
    • course_name:课程名称

假设有如下数据:

students 表

student_idname
1张三
2李四
3王五
4赵六

enrollments 表

student_idcourse_name
1数学
1英语
2物理
3化学

students 表有四个学生,其中“赵六”没有选课记录;而 enrollments 表只有三位学生的课程信息。


使用 LEFT JOIN 查询

假如我们想知道每个学生选了哪些课,即使有的学生没有选课,我们也希望在结果中看到他们的信息。这时候就可以用 LEFT JOIN

SELECT students.name, enrollments.course_name
FROM students
LEFT JOIN enrollments ON students.student_id = enrollments.student_id;

解释:

  • FROM students:以 students 表作为主表。
  • LEFT JOIN enrollments ON students.student_id = enrollments.student_id:显示所有学生的信息,即使某学生在 enrollments 表里没有选课记录。

查询结果:

namecourse_name
张三数学
张三英语
李四物理
王五化学
赵六NULL

在结果中可以看到“赵六”这一行,即使他没有课程信息,他的名字也会显示,course_name 列则显示 NULL,表示没有匹配的课程记录。


使用 RIGHT JOIN 查询

如果我们希望以课程表为主,显示每门课程的信息,即便有的课程没人选,可以用 RIGHT JOIN

假设我们有如下 enrollments 表,新增了一门没人选的课程“历史”:

enrollments 表

student_idcourse_name
1数学
1英语
2物理
3化学
NULL历史

RIGHT JOIN 查询学生和课程信息:

SELECT students.name, enrollments.course_name
FROM students
RIGHT JOIN enrollments ON students.student_id = enrollments.student_id;

查询结果:

namecourse_name
张三数学
张三英语
李四物理
王五化学
NULL历史

可以看到“历史”这一行,即使没人选,课程名称仍然会显示出来,而 name 列显示为 NULL,因为没有对应的学生信息。


总结
  • LEFT JOIN:以左表为主,显示左表中的所有数据,如果右表中没有匹配数据,用 NULL 补上。
  • RIGHT JOIN:以右表为主,显示右表中的所有数据,如果左表中没有匹配数据,用 NULL 补上。

在实际操作中,选择 LEFT JOINRIGHT JOIN 取决于你想要的数据主表是哪个,这样可以确保所需信息无遗漏。

3、交叉连接与自连接:CROSS JOIN 和 SELF JOIN

在多表查询中,有一些特殊的连接类型,像 CROSS JOINSELF JOIN,它们并不在乎表之间的关系,而是有各自的用途。CROSS JOIN 会产生笛卡尔积,列出所有可能的组合;而 SELF JOIN 则是用来让同一个表和自己“对话”,从而实现一些更灵活的查询。


什么是 CROSS JOIN(交叉连接)

交叉连接(CROSS JOIN) 是将两个表的所有行按顺序完全组合。也就是说,每一个左表的行都会与右表的每一行组合一次,这种连接方式会返回一个笛卡尔积,行数是两个表行数的乘积。

适用场景:假设我们要生成一个“所有可能的组合”列表,比如将颜色与产品组合、生成每位学生的时间表等等,这种完全匹配的列表,就适合使用 CROSS JOIN

举个例子:颜色和尺寸的组合

假设我们有两个表:

  1. colors 表:包含几种颜色。

    • color_name:颜色名称
  2. sizes 表:包含几种尺寸。

    • size_name:尺寸名称

colors 表

color_name
红色
蓝色
绿色

sizes 表

size_name
S
M
L

如果我们想要列出所有颜色和尺寸的组合,可以用 CROSS JOIN

SELECT colors.color_name, sizes.size_name
FROM colors
CROSS JOIN sizes;

结果是每种颜色都与每种尺寸进行了组合,输出如下:

color_namesize_name
红色S
红色M
红色L
蓝色S
蓝色M
蓝色L
绿色S
绿色M
绿色L

在这个例子中,CROSS JOIN 返回了三种颜色和三种尺寸的所有可能组合。


什么是 SELF JOIN(自连接)

自连接(SELF JOIN) 是让一个表和自己进行连接,用于在同一个表中找到特定关系,比如比较两行的数据或找出相互关联的数据。其实就是把一个表临时复制一份,然后“左手和右手握手”。

适用场景:比如在员工表中找出同部门的员工对,或找出用户之间的某种关系时。

举个例子:查找员工的上下级关系

假设我们有一个员工表 employees

  • employee_id:员工编号
  • name:员工名字
  • manager_id:直接主管的编号

employees 表

employee_idnamemanager_id
1张三NULL
2李四1
3王五1
4赵六2

在这里,manager_id 表示员工的直接主管。张三是李四和王五的主管,而李四是赵六的主管。假如我们想列出每位员工的名字和他们主管的名字,就可以用 SELF JOIN

SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.employee_id;

在这段查询中,我们用 e1e2 作为 employees 表的两个实例。e1 代表的是员工本人,而 e2 代表的是他们的主管。ON e1.manager_id = e2.employee_id 的条件让每个员工和他们的主管匹配在一起。

查询结果如下:

employeemanager
张三NULL
李四张三
王五张三
赵六李四

在这个结果中,我们列出了每位员工的主管,即使有的员工没有主管(例如张三),也显示了 NULL。这个查询帮助我们从单个表里找到一对一的上下级关系。


总结
  • CROSS JOIN:产生两个表的笛卡尔积,适合列出所有组合。
  • SELF JOIN:让表和自己关联,适合查询同一表中某些数据之间的关系,比如上下级或配对关系。

这些连接方式在处理特殊场景时非常实用,让查询的灵活性更高。

四、子查询:单行、多行、嵌套子查询

子查询其实就是在一个查询里再嵌入另一个查询。它帮助我们先找到一些数据,再用这些数据来完成主查询。子查询有不同的形式,像单行子查询、多行子查询和嵌套子查询。让我们一起来看看它们是什么、怎么用,配上简单的例子,帮助更好地理解。


单行子查询

单行子查询就是子查询只返回一行数据的情况。在这种情况下,子查询的结果通常用在主查询的WHERESELECT部分,用来帮助过滤数据或计算一些值。

举个例子:找出工资最高的人的名字

假设我们有一个员工表 employees

idnamesalary
1张三5000
2李四7000
3王五8000

我们想要知道谁的工资最高。我们可以通过子查询找到最高的工资,再用它来过滤出对应的名字。

SELECT name 
FROM employees 
WHERE salary = (SELECT MAX(salary) FROM employees);

这里,子查询 (SELECT MAX(salary) FROM employees) 会返回一个值 8000,也就是最高工资,主查询接着用 WHERE salary = 8000 过滤出工资为 8000 的员工——王五。


多行子查询

多行子查询就是子查询返回多行数据的情况。通常情况下,我们会用 INANYALL 等关键字来让主查询匹配子查询的多个结果。

举个例子:找出工资高于某些特定职位的员工

假设我们有两个表:

  1. employees 表:列出所有员工的名字和工资。
  2. positions 表:列出特定职位的最低工资要求。

employees 表

idnamesalary
1张三5000
2李四7000
3王五8000

positions 表

position_idmin_salary
16000
27500

我们想找出所有工资比任何一个职位最低工资都高的员工。这时可以用多行子查询:

SELECT name 
FROM employees 
WHERE salary > ANY (SELECT min_salary FROM positions);

在这个查询中,(SELECT min_salary FROM positions) 会返回一个列表 [6000, 7500]。主查询就会找出比这个列表中任何一个数字大的工资,比如张三和李四的工资都满足条件。


嵌套子查询

嵌套子查询指的是在子查询里面再嵌入子查询,让查询变得层层深入。嵌套子查询通常用在更复杂的查询里,比如想要多步过滤数据的情况。

举个例子:找到某部门工资最高的员工

假设我们再加一个部门表 departments,然后员工表里也有部门信息:

departments 表

department_iddepartment_name
1人事部
2技术部

employees 表

idnamesalarydepartment_id
1张三50001
2李四70002
3王五80002
4赵六55001

我们现在要找出每个部门工资最高的员工。在这里,我们可以通过嵌套子查询先找到每个部门的最高工资,再用这些结果过滤出对应的员工。

SELECT name, department_id 
FROM employees 
WHERE salary IN (SELECT MAX(salary) FROM employees GROUP BY department_id);

在这里,最内层的子查询 (SELECT MAX(salary) FROM employees GROUP BY department_id) 会先按照每个部门返回最高工资。然后,主查询会筛选出符合这个最高工资的员工。

最终结果可能是:

namedepartment_id
赵六1
王五2

总结

  • 单行子查询:返回单个值,用来直接对比。
  • 多行子查询:返回多个值,用 INANYALL 进行多重匹配。
  • 嵌套子查询:子查询中套子查询,适合更复杂的多步过滤操作。

子查询是一种强大的工具,能够在一个查询中分步处理数据。掌握这些概念后,就可以实现更灵活的数据筛选。

五、视图(VIEW)

视图(VIEW)在数据库里有点像一个“假窗户”。你可以通过视图“看到”一部分数据,但是这些数据其实还是存在于原始的表里,并没有被复制。视图可以让查询更简洁,还能让我们控制数据访问,更灵活地管理权限。视图的操作基本上包括创建视图、更新视图里的数据,以及删除视图。


什么是视图

视图是一个基于查询结果的“虚拟表”。它本身不存储数据,而是保存一个查询。当我们对视图做查询时,它会把视图里的查询运行一遍,然后返回结果。想象一下,我们有一个大的员工表 employees,包含很多信息,比如姓名、年龄、工资、部门等。你可能只需要查看员工的姓名和工资,并不想每次都写一长串的查询条件。那么我们就可以用视图来搞定这件事。


创建视图:CREATE VIEW

要创建视图,我们用 CREATE VIEW 语句,并给视图起一个名字。然后我们写出视图的查询逻辑,也就是告诉数据库:从哪些表里选数据、需要哪些列。

举个例子

假设我们有这样一个员工表 employees

idnamesalarydepartment
1张三5000技术部
2李四7000人事部
3王五8000技术部

如果我们只想要看员工的 namesalary,可以创建一个视图 employee_salary 来简化查询:

CREATE VIEW employee_salary AS
SELECT name, salary
FROM employees;

这样我们每次查询 employee_salary 视图时,就相当于执行了 SELECT name, salary FROM employees。我们只需写一句简单的 SELECT * FROM employee_salary 就能看到员工的名字和工资!


视图的优点
  1. 简化查询:像上面的例子一样,把复杂的查询简化成一个视图。
  2. 数据安全:视图可以限制用户只能看到一部分数据,比如上例中创建了一个不含部门信息的视图,敏感数据得到了保护。
  3. 动态更新:视图本质上是一个查询,所以它的内容会跟着原始表的变化而变化。如果员工的工资发生变化,再查询视图时得到的也是最新数据。

更新视图里的数据

有时我们希望通过视图直接更新数据,比如在视图中修改某员工的工资。在大多数数据库中,这是可以实现的,但是也有一些限制。通常,视图能更新的前提是:

  • 视图基于单个表创建,而不是多表的复杂查询。
  • 视图不包含聚合操作(比如 SUMAVG 等)。
举个例子

假设我们需要通过 employee_salary 视图更新李四的工资:

UPDATE employee_salary
SET salary = 7500
WHERE name = '李四';

这个更新会直接影响到 employees 表里的数据,因为视图 employee_salary 是基于 employees 表的。所以更新视图里的数据就像在修改原始表里的数据一样。


删除视图:DROP VIEW

当我们不再需要某个视图时,可以用 DROP VIEW 删除它。这个操作只是删除了视图本身,并不会影响原始表的数据。

删除视图的例子

如果不再需要 employee_salary 视图,可以删除它:

DROP VIEW employee_salary;

删除后,employee_salary 就不存在了,当然也无法再查询它了。


小结

视图是数据库管理中的好帮手,可以帮助我们简化查询、保护数据和动态更新。简单来说:

  • 创建视图:用 CREATE VIEW 把常用查询封装成一个虚拟表。
  • 更新视图:在满足条件的情况下,可以通过视图更新原始数据。
  • 删除视图:用 DROP VIEW 删除不再需要的视图。

掌握视图之后,我们的数据库查询操作会更高效,也更灵活。

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

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

相关文章

ElasticSearch备考 -- Index shrink

一、题目 索引task包括5个分片一个副本,对索引执行shrink压缩操作,压缩后索引为1主分片,索引名称为task-new 二、思考 在执行shrink前必须满足三个前置条件 The index must be read-only.A copy of every shard in the index must reside o…

名词(术语)了解--CSSOM (CSS Object Model)

名词(术语)了解–CSSOM (CSS Object Model) CSSOM 概述 CSSOM 是一个与 DOM (Document Object Model) 相对应的、用于 CSS 的 API 集合。 它提供了一种程序化的方式来读取和修改文档的样式信息。 CSSOM 的主要组成部分 样式规则树 document └── …

智能化超声波影像分析,优化医疗决策的开源AI解决方案

思通数科的医疗信息精准抽取系统是一款基于人工智能的开源软件,旨在自动化处理医疗数据,特别是从超声波影像到诊断报告的信息提取。该系统集成了图像识别、自然语言处理和知识图谱等先进技术,能够从医疗影像中提取关键数据,并将这…

Objective-C 音频爬虫:实时接收数据的 didReceiveData_ 方法

在互联网技术领域,数据的获取和处理是至关重要的。尤其是对于音频内容的获取,实时性和效率是衡量一个爬虫性能的重要指标。本文将深入探讨在Objective-C中实现音频爬虫时,如何高效地使用didReceiveData:方法来实时接收数据,并通过…

Python轴承故障诊断 (15)基于CNN-Transformer的一维故障信号识别模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…

如何在 Elasticsearch Ruby 客户端中使用 ES|QL Helper

作者:来自 Elastic Fernando Briano 了解如何使用 Elasticsearch Ruby 客户端编写 ES|QL 查询并处理其结果。 简介 Elasticsearch Ruby 客户端可用于编写 EQ|QL 查询,使处理从 esql.query 返回的数据更加容易。ES|QL 允许开发人员通过查询过滤、转换和分…

【elkb】ELKB安装token过期

问题 elastic启动时候生成的token 有效期只有30分钟。 30分钟后提示: Couldnt configure Elastic Generate a new enrollment token or configure manually. 相关版本信息 elasticsearch:8.8.1kibana:8.8.1logstash:8.8.1file…

交易所开发:开启数字金融新时代

当今数字化高速发展的时代,交易所作为金融市场的核心枢纽,发挥着至关重要的作用。而随着区块链技术的兴起,数字货币交易所的开发更是为金融领域带来了全新的变革与机遇。 一、数字货币交易所的重要性 数字货币交易所是连接数字货币世界与传统…

企业内训|LLM大模型在服务器和IT网络运维中的应用-某日企IT运维部门

本课程是为某在华日资企业集团的IT运维部门专门定制开发的企业培训课程,本课程旨在深入探讨大型语言模型(LLM)在服务器及IT网络运维中的应用,结合当前技术趋势与行业需求,帮助学员掌握LLM如何为运维工作赋能。通过系统…

网上商城设计小程序ssm+论文源码调试讲解

2相关技术 2.1微信小程序 小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。尤其拥抱微信生态圈,让微信小程序更加的如虎添翼,发展迅猛。 2.2 MYSQL数据…

大贤3D家谱——让修家谱不再困难

修家谱作为一种文化传统,承载着家族的历史和文化记忆,但近年来确实面临一些困难,导致很多人不愿意修家谱。以下是一些主要原因: 1、信息获取难度: 家谱的修订需要大量的历史资料和族谱记录。许多家庭的老谱由于时间久…

Node + HTML搭建自己的ChatGPT [基础版]

文章目录 明明外面的ChatGPT产品那么多了,为什么要在本地搭建自己的ChatGPT呢?整体架构流程1. 获取APIKey1.1 常见的AI模型1.2 为什么选DeepSeek1.3 怎么获取DeepSeek的APIKey1.3.1 注册并登录DeepSeek开放平台1.3.2 选择API keys1.3.3 创建API key1.3.4…

【Linux学习】(8)第一个Linux编程进度条程序|git三板斧

前言 第一个Linux编程——进度条git的简单使用 一、第一个Linux编程——进度条 在写进度条之前我们需要两个基础知识: 回车换行缓冲区 1. 回车换行 首先我们需要知道回车换行它是两个概念,回车是回车,换行是换行换行:光标从上往下…

DEVOPS: 认证与调度

概述 不知道大家有没有意识到一个现实,就是大部分时候,我们已经不像以前一样通过命令行,或者可视窗口来使用一个系统了现在我们上微博、或者网购,操作的其实不是眼前这台设备,而是一个又一个集群 通常,这样…

MUX VLAN 实验配置

MUX VLAN(Multiplex VLAN)是一种高级的VLAN技术,通过在交换机上实现二层流量隔离和灵活的网络资源控制,提供了一种更为细致的网络管理方式 MUX VLAN通过定义主VLAN(Principal VLAN)和多个子VLAN&#xff0…

海外云手机怎样助力亚马逊店铺运营?

随着全球化的发展,越来越多的企业开始重视海外市场的拓展,尤其是出海企业和B2B外贸企业。亚马逊作为全球最大的电商平台之一,成为了许多企业争夺国际市场的重点战场。本文将深入分析海外云手机在优化亚马逊店铺引流中的作用和优势&#xff0c…

优惠券项目的设计与实现,完结!

你好 我是田哥 我的充电桩项目中,优惠券相关功能已基本完成。另外,关于充电桩项目,我之前分享过一些相关文章: 充电桩项目,开源啦! 充电桩项目实战:消息丢失和重复消费问题 用充电桩项目面试&am…

【electron8】electron实现“图片”的另存为

注:该列出的代码,都在文章内示例出 1. 另存为按钮事件: const saveAsHandler async () > {const { path, sessionId } recordInfoif(typeof message ! string) return;// 因为我的图片是加密的,所以我需要根据接口返回的路…

使用vue+kkFileview组件实现各种类型文件预览

关于kkFileView 【参考】:https://kkfileview.keking.cn/zh-cn/docs/home.html 文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署。万能的文件预览开源项目,基本支持主流文档格式预览 本项目介绍 项目使用…

低空经济产业链、政策、延伸品调研笔记

文章目录 1 低空经济市场1.1 政策摘要1.2 市场规模预测 3 涉及产业链与核心产品3.1 产业链3.2 原材料3.2.1 上游3.2.2 中游3.2.3下游 3.3 无人机3.4 eVTOL3.5 空管系统 4 应用场景4.1 城市空中出行(UAM)4.2 低空物流4.3 低空旅游与体验4.4 农林植保与监测4.5 基础设施巡检与维护…