《MySQL 查询进阶:复杂查询语句的魅力》
一、引言
MySQL 的复杂查询语句就像是一把神奇的钥匙,能够打开数据世界的大门,展现出数据的无限魅力。本文将带你深入探索 MySQL 查询进阶技巧,从常用查询到子查询,再到视图的运用,让你领略复杂查询语句的强大功能。
在当今数据驱动的时代,数据库管理系统的重要性不言而喻。MySQL 作为一款广泛应用的开源数据库,其强大的查询功能为数据的检索和分析提供了有力支持。无论是简单的数据查询,还是复杂的统计分析,MySQL 都能满足用户的需求。
MySQL 的查询语句可以分为多个层次,从基础的单表查询到复杂的多表连接查询,再到子查询和视图的运用,每一个层次都有其独特的魅力和用途。通过不断深入学习和掌握这些查询技巧,用户可以更加高效地管理和分析数据,为企业决策和个人研究提供有力支持。
接下来,我们将逐步介绍 MySQL 查询进阶的各个方面,包括条件查询、关键字排序、分组与聚合函数、限制查询、别名、子查询和视图等。通过实际案例和详细的讲解,帮助读者更好地理解和应用这些技巧。
二、常用查询
1. order by 排序
- 多种排序方式:
-
- 升序是按照字段值从小到大进行排列。例如,对数字字段进行排序,1、2、3、4 这样的顺序;对字符字段进行排序,从 a 到 z 的顺序。
-
- 降序则是从大到小或从 z 到 a 的顺序排列。
-
- 多字段排序可以先按照一个字段进行排序,如果该字段值相同,再按照另一个字段进行排序。比如先按照年龄排序,年龄相同的再按照成绩排序。
-
- 结合 where 进行条件过滤再排序,先通过 where 子句筛选出满足条件的数据,然后再对这些数据进行排序。例如,先筛选出成绩大于 80 分的学生记录,然后再按照年龄升序排列。
- 语法与示例:
-
- order by 语句的语法为:SELECT column1, column2,... FROM table_name ORDER BY column_name [ASC|DESC]; 其中 ASC 表示升序(默认),DESC 表示降序。
-
- 示例代码:SELECT * FROM students ORDER BY age ASC; 表示按照学生年龄升序排列查询学生表中的数据。如果要降序排列,可以写成 SELECT * FROM students ORDER BY age DESC; 多字段排序的示例代码为 SELECT * FROM students ORDER BY age ASC, score DESC; 表示先按照年龄升序排列,如果年龄相同,再按照成绩降序排列。
2. and 和 or 判断
- 使用方法:
-
- and 用于连接多个条件,只有当所有条件都满足时,才会返回结果。例如,查询年龄大于 18 岁且性别为男的学生记录,可以使用 SELECT * FROM students WHERE age > 18 AND gender = ' 男 ';
-
- or 用于连接多个条件,只要其中一个条件满足,就会返回结果。例如,查询年龄大于 20 岁或者成绩大于 90 分的学生记录,可以使用 SELECT * FROM students WHERE age > 20 OR score > 90;
-
- 在嵌套和多条件使用时,要注意优先级和括号的使用。多个 and 必须放在前面,or 的条件必须放在后面,并且所有的 or 必须组合在一起,用括号括起来,与前面的条件用 and 拼接。
- 示例演示:
-
- 示例代码:SELECT * FROM students WHERE is_rac = 0 AND instance_number = 1 AND status = 1 AND (ip_address LIKE CONCAT ('%', #{keyword}, '%') OR db_name LIKE CONCAT ('%', #{keyword}, '%') OR instance_name LIKE CONCAT ('%', #{keyword}, '%')); 这个查询在满足前面几个条件的基础上,通过 or 连接了三个模糊查询条件,用于搜索学生表中的相关记录。
3. distinct 查询不重复记录
- distinct 的作用:
-
- distinct 关键字的功能是查询不重复记录,即返回指定字段中不同的值。
- 操作要点:
-
- distinct 必须放在最开头。例如,SELECT DISTINCT column_name FROM table_name;
-
- 只能对特定字段进行操作,如果对多个字段进行操作,只有当这些字段组合起来的值完全相同时才会被视为重复记录。例如,SELECT DISTINCT name, age FROM table_name; 只有当 name 和 age 两个字段的值都相同时才会被去重。
4. group by 对结果进行分组
- 分组原理:
-
- group by 语句通过指定一个或多个字段,将查询结果按照这些字段的值进行分组。相同字段值的记录被归为一组,然后可以结合聚合函数对每个组进行数据汇总。
- 原则与示例:
-
- 原则是 select 后面没有聚合函数的列必须出现在 group by 后面。例如,SELECT department, COUNT () AS employee_count FROM employees GROUP BY department; 这里 department 列既出现在 select 后面,也出现在 group by 后面,而 COUNT () 是聚合函数。如果写成 SELECT name, COUNT (*) AS employee_count FROM employees GROUP BY department; 就会报错,因为 name 列不在 group by 后面。
5. limit 限制结果输出条目
- 功能介绍:
-
- limit 关键字的作用是用于限制查询结果的输出条目数。可以控制返回的记录数量,方便进行分页查询等操作。
- 用法示例:
-
- 查询前几条记录可以使用 SELECT * FROM table_name LIMIT n; 这里 n 表示要返回的记录条数。例如,SELECT * FROM students LIMIT 10; 表示查询学生表中的前 10 条记录。
-
- 从特定位置开始查询一定数量的记录可以使用 SELECT * FROM table_name LIMIT offset, n; 这里 offset 表示要跳过的记录条数,n 表示要返回的记录条数。例如,SELECT * FROM students LIMIT 5, 10; 表示跳过前 5 条记录,然后查询接下来的 10 条记录。
6. 设置别名(alias - as)
- 列别名设置:
-
- 可以为列设置别名,通过 AS 关键字实现。例如,SELECT column_name AS alias_name FROM table_name; 这样在查询结果中,该列将以别名显示。列别名可以使查询结果更具可读性,也方便在后续的查询中引用。
- 查询表记录数量并显示别名:
-
- 可以使用 COUNT () 函数查询表的记录数量,并为其设置别名。例如,SELECT COUNT () AS total_records FROM table_name; 这样查询结果中会显示一个名为 total_records 的列,其值为表中的记录总数。
- 利用 as 将查询数据导入到另一个表内:
-
- 可以使用 AS 关键字将查询的数据导入到另一个表中。例如,INSERT INTO new_table SELECT column1, column2,... FROM old_table AS source_table; 这里将 old_table 表中的数据查询出来,并插入到 new_table 表中,在查询过程中,old_table 被命名为 source_table,方便在后续的查询语句中引用。
7. 通配符查询
- 通配符与 LIKE 结合使用:
-
- 通配符通常与 LIKE 一起使用进行模糊查询。例如,LIKE '% pattern%' 表示包含指定模式的字符串,LIKE 'pattern%' 表示以指定模式开头的字符串,LIKE '% pattern' 表示以指定模式结尾的字符串。
- 示例:
-
- 查询以特定字符开头的记录可以使用 SELECT * FROM table_name WHERE column_name LIKE 'pattern%'; 例如,查询以字母 A 开头的学生姓名,可以使用 SELECT * FROM students WHERE name LIKE 'A%';
-
- 查询以特定字符结尾的记录可以使用 SELECT * FROM table_name WHERE column_name LIKE '% pattern'; 例如,查询以字母 o 结尾的学生姓名,可以使用 SELECT * FROM students WHERE name LIKE '% o';
-
- 查询包含特定字符的记录可以使用 SELECT * FROM table_name WHERE column_name LIKE '% pattern%'; 例如,查询包含字母 e 的学生姓名,可以使用 SELECT * FROM students WHERE name LIKE '% e%'。
三、子查询
1. select 查询
- 相同表查询:在同一表中进行子查询可以通过在一个查询语句中嵌套另一个针对相同表的查询来实现。例如,假设我们有一个学生表,包含学生的姓名、年龄和成绩等字段。如果我们想要找出年龄大于平均年龄的学生,可以使用以下子查询:SELECT * FROM students WHERE age > (SELECT AVG (age) FROM students); 这里,内部子查询先计算出学生表中年龄的平均值,然后外部查询筛选出年龄大于这个平均值的学生记录。这种方法在需要根据同一表中的某些统计信息进行筛选时非常有用。
- 多表查询:在多个表之间进行子查询时,通常需要使用连接条件来确定表之间的关系。例如,假设有一个学生表和一个课程表,以及一个选课表用于关联学生和课程。如果我们想要找出选修了特定课程的学生信息,可以使用以下子查询:SELECT * FROM students WHERE student_id IN (SELECT student_id FROM enrollments WHERE course_id = ' 特定课程 ID'); 这里,内部子查询从选课表中找出选修了特定课程的学生 ID,然后外部查询在学生表中筛选出这些学生的信息。在处理多表查询时,需要确保连接条件准确无误,以获得正确的查询结果。
- not 取反操作:使用 not 可以对子查询的结果进行取反。例如,假设我们有一个订单表,包含订单 ID、客户 ID 和订单状态等字段。如果我们想要找出没有被特定客户下单的订单,可以使用以下子查询:SELECT * FROM orders WHERE order_id NOT IN (SELECT order_id FROM orders WHERE customer_id = ' 特定客户 ID'); 这里,内部子查询找出特定客户的订单 ID,然后外部查询使用 not in 对这个结果进行取反,筛选出不是特定客户下单的订单。
- 结合 as 别名进行子查询:结合 as 别名可以提高子查询的可读性和可维护性。例如,假设有一个销售表和一个产品表,我们想要找出销售额最高的产品信息。可以使用以下子查询:SELECT * FROM products AS p WHERE product_id IN (SELECT product_id FROM sales AS s WHERE sales_amount = (SELECT MAX (sales_amount) FROM sales)); 这里,我们给产品表和销售表分别取了别名 p 和 s,使得查询语句更加清晰易懂。在复杂的子查询中,使用别名可以避免表名的重复书写,提高查询的效率。
2. insert 插入
- 子查询在插入操作中的应用:在 insert 语句中,可以使用子查询将查询结果插入到另一个表中。例如,假设有一个源表和一个目标表,我们想要将源表中的部分数据插入到目标表中。可以使用以下语句:INSERT INTO target_table SELECT column1, column2,... FROM source_table WHERE condition; 这里,子查询从源表中选择满足特定条件的数据,然后将这些数据插入到目标表中。在进行插入操作时,需要确保源表和目标表的字段类型和数量相匹配,以避免数据插入错误。
3. update 更新
- 子查询在更新操作中的应用:在 update 语句中,可以使用子查询根据特定条件更新表中的数据。例如,假设有一个学生表,我们想要将成绩低于平均成绩的学生的成绩提高 10 分。可以使用以下子查询:UPDATE students SET score = score + 10 WHERE score <(SELECT AVG (score) FROM students); 这里,内部子查询计算出学生表中的平均成绩,然后外部查询将成绩低于这个平均值的学生的成绩提高 10 分。在使用子查询进行更新操作时,需要确保子查询的结果准确无误,以避免错误地更新数据。
4. delete 删除
- 子查询在删除操作中的应用:在 delete 语句中,可以使用子查询删除满足特定条件的记录。例如,假设有一个订单表,我们想要删除特定客户的所有订单。可以使用以下子查询:DELETE FROM orders WHERE customer_id IN (SELECT customer_id FROM customers WHERE customer_name = ' 特定客户名称 '); 这里,内部子查询找出特定客户的客户 ID,然后外部查询删除这些客户 ID 对应的订单记录。在进行删除操作时,需要谨慎使用子查询,确保不会误删重要数据。
5. exists 布尔输出
- exists 的作用:exists 关键字用于进行布尔输出,判断子查询是否有结果。如果子查询返回至少一行数据,则 exists 表达式的结果为 TRUE;否则,结果为 FALSE。例如,假设我们有一个学生表和一个课程表,以及一个选课表用于关联学生和课程。如果我们想要找出选修了至少一门课程的学生信息,可以使用以下子查询:SELECT * FROM students WHERE EXISTS (SELECT * FROM enrollments WHERE student_id = students.student_id); 这里,内部子查询检查选课表中是否存在与学生表中当前学生 ID 匹配的记录。如果存在,则 exists 表达式的结果为 TRUE,外部查询将返回该学生的信息。
- 应用场景:exists 在连接查询中非常有用,可以用于判断是否存在满足条件的记录。例如,在上述学生和课程的例子中,我们可以使用 exists 来筛选出选修了特定课程的学生信息:SELECT * FROM students WHERE EXISTS (SELECT * FROM enrollments WHERE student_id = students.student_id AND course_id = ' 特定课程 ID'); 这里,内部子查询在选课表中查找与学生表中当前学生 ID 匹配且课程 ID 为特定值的记录。如果存在这样的记录,则 exists 表达式的结果为 TRUE,外部查询将返回该学生的信息。
四、MySQL 视图
1. 什么是视图
- 视图的定义:视图是基于 SQL 查询的可视化表示,如同一个虚拟的表。它并不实际存储数据,而是由查询语句动态生成结果集。当对视图进行查询时,数据库系统会执行定义视图的查询语句,并返回相应的结果。
- 作用与优势:
-
- 简化复杂查询:将复杂的 SQL 语句封装在视图中,用户可以像查询普通表一样使用视图,无需了解底层复杂的查询逻辑。
-
- 提高数据安全性:通过视图可以限制用户对特定数据的访问,只展示用户需要的数据,保护敏感信息。
-
- 提供逻辑抽象:视图可以隐藏底层表的结构和复杂性,为用户提供一个更简洁的逻辑视图。同时,当底层表结构发生变化时,只需修改视图定义,而不影响使用视图的应用程序。
2. 视图和表的区别与联系
- 区别:
-
- 结构方面:表是实际存储数据的实体,具有固定的结构和内容;视图是虚拟表,不实际存储数据,只是存储了查询的定义。
-
- 存储方式:表中的记录需要占用物理空间存储数据;视图不占实际的物理空间,其结果集是在查询时动态生成的。
-
- 更新限制:视图的更新受到一定限制,例如当视图定义中包含聚合函数、分组、连接等操作时,可能无法直接进行更新操作;而表可以更灵活地进行插入、更新和删除操作。
- 联系:
-
- 视图是在基本表之上建立的表,其字段和记录都来自基本表,依赖基本表而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象,在逻辑意义上建立新的关系。
3. 单表创建视图
- 创建方法:在 MySQL 中,可以使用 CREATE VIEW 语句基于单个表创建视图。语法为:CREATE VIEW view_name AS SELECT column1, column2,... FROM single_table; 例如,假设我们有一个学生表 students,要创建一个只包含学生姓名和年龄的视图,可以使用以下语句:CREATE VIEW student_name_age AS SELECT name, age FROM students;
- 查询视图:查询单表视图中的数据与查询普通表类似,使用 SELECT 语句即可。例如:SELECT * FROM student_name_age; 对视图进行更新和删除操作时,需要注意视图的可更新性。如果视图定义满足一定条件,如基于单个表且不包含聚合函数等复杂操作,可以进行更新和删除操作。例如,要更新视图中的年龄字段,可以使用 UPDATE 语句:UPDATE student_name_age SET age = age + 1;
4. 多表创建视图
- 多表连接创建视图:可以通过多表连接创建视图,使用 JOIN 关键字设置连接条件。例如,假设有学生表 students、课程表 courses 和选课表 enrollments,要创建一个包含学生姓名、课程名称和选课成绩的视图,可以使用以下语句:CREATE VIEW student_course_grade AS SELECT s.name, c.course_name, e.grade FROM students s JOIN enrollments e ON s.student_id = e.student_id JOIN courses c ON e.course_id = c.course_id;
- 视图的应用:多表视图的应用场景广泛,如简化复杂的多表查询,用户无需了解复杂的连接逻辑,只需查询视图即可获取所需数据。同时,多表视图可以提供定制化的数据视图,根据特定需求展示特定字段的数据组合。
五、NULL 值
1. NULL 值与空值区别
- 概念辨析:在 MySQL 中,NULL 值表示缺少一个已知或适当的值,它并不等同于空字符。空值通常指一个空字符或零长度的字符串,可以用空引号 "" 来表示。例如,整数类型以外的列都可以包含 NULL 值,但空值是已经被定义了的值,只是在具体情况下没有实际的值填入。零和空字符串其实是值,而 NULL 意味着 “没有值”。
- 处理方法:在查询和操作中,处理 NULL 值和空值的方式有所不同。判断 NULL 要用 IS NULL 或者 IS NOT NULL,SQL 语句函数中可以使用 IFNULL () 函数来进行处理。而判断空字符用 "=" 或者 "<"、">" 来进行处理。在进行 COUNT () 统计某列的记录数的时候,如果采用的 NULL 值,会被系统自动忽略掉,但是空值是会进行统计到其中的。在使用 ORDER BY 进行排序时,对于升序排序,NULL 值会排在其他值之前;对于降序排序,NULL 值会排在其他值之后。在 SQL 中,NULL 值与任何其他值进行比较时都不会为真,即使是 NULL 与 NULL 进行比较也是如此。
六、总结
MySQL 的复杂查询语句包括常用查询、子查询和视图等,它们各有其独特的魅力和实用性。
在常用查询中,我们学习了order by排序、and和or判断、distinct查询不重复记录、group by对结果进行分组、limit限制结果输出条目、设置别名以及通配符查询等技巧。这些技巧能够帮助我们高效地检索和处理数据,满足不同的查询需求。
子查询则提供了更强大的查询功能,可以在select、insert、update和delete操作中灵活运用。通过子查询,我们可以实现复杂的筛选和数据处理操作,提高数据管理的效率。
视图是基于 SQL 查询的可视化表示,如同一个虚拟的表。它具有简化复杂查询、提高数据安全性和提供逻辑抽象等优势。我们可以通过单表或多表创建视图,灵活地定制数据视图,满足不同用户的需求。
总之,MySQL 的复杂查询语句为我们提供了强大的数据查询和处理工具。在实际应用中,我们应
相关文章:
《MySQL 查询进阶:复杂查询语句的魅力》
一、引言 MySQL 的复杂查询语句就像是一把神奇的钥匙,能够打开数据世界的大门,展现出数据的无限魅力。本文将带你深入探索 MySQL 查询进阶技巧,从常用查询到子查询,再到视图的运用,让你领略复杂查询语句的强大功能。 …...
Vue解决跨域问题
要解决 Vue 项目的跨域问题并通过 vue.config.js 配置代理,可以按照以下步骤修改 vue.config.js 文件。你提供的代码大部分已经正确,只需要做一些格式上的调整。以下是正确的 vue.config.js 配置: // vue.config.jsmodule.exports {devServ…...
大语言模型(LLM)与智能机器人的应用分析
系列文章目录 前言 近年来,大型语言模型(LLM)的集成彻底改变了机器人领域,使机器人能够以人类熟练程度进行交流、理解和推理。本文探讨了 LLM 对机器人的多方面影响,并针对在不同领域利用这些模型的关键挑战和机遇进行了研究。通过将 LLM 应用程序分类并分析核心机器人元素…...
String【Redis对象篇】
🏆 作者简介:席万里 ⚡ 个人网站:https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。 🍻 对计算机充满兴趣,愿意并且希望学习更多的技…...
Elasticsearch高性能实践
前言 本方案主要从运维层面分析es是实际生产使用过程中的参数优化,深入理解es各个名词及含义,深入分析es的使用过程中应注意的点,详细解释参数设置的原因以及目的,主要包括系统层面,参数层面。除此之外,优…...
Maven 安装配置(详细教程)
文章目录 一、Maven 简介二、下载 Maven三、配置 Maven3.1 配置环境变量3.2 Maven 配置3.3 IDEA 配置 四、结语 一、Maven 简介 Maven 是一个基于项目对象模型(POM)的项目管理和自动化构建工具。它主要服务于 Java 平台,但也支持其他编程语言…...
sql server 创建索引实验
创建一个非主键索引,大小30G,数据文件增加了30G,日志文件增长了50G,4分钟完成, (日志文件增加设置为2048MB 或者 256MB 执行时间都是4分钟,没有多大的时间差异) 实验环境: 主机cpu…...
解决Vue项目中npm install卡住问题的详细指南
解决Vue项目中npm install卡住问题的详细指南 引言 在开发Vue项目时,我们经常会遇到npm install命令卡住的问题,特别是在构建依赖树时。本文将分享一些实用的解决方案,帮助您快速解决这一常见问题。 问题描述 在执行npm install时…...
手机实时提取SIM卡打电话的信令声音--社会价值(一、方案解决了什么问题)
手机实时提取SIM卡打电话的信令声音 --社会价值(一、方案解决了什么问题) 一、前言 这段时间,我们在技术范围之外陷入了一个自证或者说下定义的怪圈,即要怎么样去介绍或者描述:我们是一个什么样的产品。它在当前这个世界上,处于…...
35.1 thanos项目介绍和二进制部署
本节重点介绍 : 核心优点 无需维护存储,存储高可用: 利用廉价的公有云对象存储,高可用长时间存储,数据降采样:利用Compactor降采样完全适配原生prometheus查询接口:Query实现多级数据缓存配置 二进制部署 …...
【中工开发者】鸿蒙商城实战项目(启动页和引导页)
创建一个空项目 先创建一个新的项目选择第一个,然后点击finish 接下来为项目写一个名字,然后点击finish。 把index页面的代码改成下面代码块的代码,就能产生下面的效果 Entry Component struct Index {build() {Column(){Blank()Column(){…...
云计算IaaS-PaaS-SaaS三种服务模式转至元数据结尾
在当今数字化时代,云计算已经成为推动企业创新与发展的核心力量。而云计算的模型主要有三种:IAAS、PAAS 和 SAAS,它们各自在云计算的庞大体系中扮演着独特且关键的角色,恰似一座大厦的不同楼层,共同构建起强大而灵活的…...
Python爬虫:如何优雅地“偷窥”商品详情
在这个信息爆炸的时代,获取商品详情已经不再是简单的点击和浏览。我们需要的是速度、效率,还有一点点的...偷偷摸摸。没错,今天我们要聊的是如何使用Python爬虫来“偷窥”商品详情。别担心,我们保证一切都是合法合规的,…...
自动化测试报错:Exception managing chrome: error decoding response body
报错:Exception managing chrome: error decoding response body 报错解释: 这个错误通常发生在使用Selenium WebDriver时,尝试管理(例如关闭)Chrome浏览器时出现了问题。具体来说,是在解码Chrome浏览器响…...
Dataset 与 JavaRDD
是的,Dataset 底层确实是基于 RDD 实现的,但它是通过更高层次的抽象和优化来提供更强大和易用的功能。以下是关于 Dataset 底层实现的一些详细信息: 1. RDD 是基础 RDD(弹性分布式数据集) 是 Spark 最基础的抽象&…...
【后端面试总结】Golang defer的实现原理和常见面试问题
前言 在Go语言中,defer关键字用于延迟函数的执行,即在包含defer语句的函数返回之前执行。这一特性使得defer在资源释放、文件关闭、解锁资源等场景中非常有用。本文将深入探讨defer的实现原理,并总结一些常见的面试问题。 基本使用 defer通…...
http 502 和 504 的区别
首先看一下概念: 502:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。503:由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢…...
农业园区气象站
农业园区气象站是一种专为农业生产和科研设计的气象监测设备,它集成了多种传感器和技术,用于实时、准确地监测和记录农业园区内的气象数据。以下是农业园区气象站的主要功能和用处: 一、主要功能 实时监测:农业园区气象站能够实时…...
机器学习学习笔记-20241211
文章目录 空间归纳偏置局部性(Locality)平移不变性(Translation Invariance)空间关系(Spatial Relationships)尺度不变性(Scale Invariance)上下文依赖(Context Dependen…...
【在Linux世界中追寻伟大的One Piece】HTTP Session
目录 1 -> 引入HTTP Session 1.1 -> 定义 1.2 -> 工作原理 1.3 -> 安全性 1.4 -> 超时和失效 1.5 -> 用途 2 -> 模拟session行为 3 -> 实验测试session 1 -> 引入HTTP Session 1.1 -> 定义 HTTP Session是服务器用来跟踪用户与服务器交…...
人工智能|自然语言处理——机器翻译评价指标Bleu和Rouge
在机器翻译任务中,BLEU 和 ROUGE 是两个常用的评价指标,BLEU 根据精确率(Precision)衡量翻译的质量,而 ROUGE 根据召回率(Recall)衡量翻译的质量 BLEU(Bilingual Evaluation Understudy): BLEU是一种用于评…...
【前端】JavaScript中的函数形式参数:预解析与作用域详解
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯示例代码💯1. 形式参数的预解析模拟预解析后的代码 💯2. 函数作用域与子函数的关系代码详解 💯3. 扩展:块作用域与变量提…...
自然语言处理的未来愿景
自然语言处理的未来愿景 在这个信息爆炸的时代,计算机如何理解和生成我们日常使用的语言,已经成为一个引人注目的问题。你有没有想过,为什么智能助手能理解你的指令?又或者,为什么社交媒体上的推荐引擎能够精准地推荐你喜爱的内容?这背后,正是自然语言处理(NLP)在发挥…...
Vmodel环境配置
1.conda create -n pytorch311 python3.11 # 重新进入虚拟环境 source activate # 退出虚拟环境 conda deactivate 最后,重新执行 conda activate pytorch311 pip install torch-2.0.0cpu-cp311-cp311-linux_x86_64 配置Graph-WaveNet网络: pip…...
nvm-windows | node版本管理
问题: npm ERR! notsup Not compatible with your version of node/npm: npm10.9.2 npm ERR! notsup Required: {"node":"^18.17.0 || >20.5.0"} npm ERR! notsup Actual: {"npm":"9.5.0","node":"v18.…...
GLM-4V-Flash:智谱AI引领多模态视觉模型新潮流
点击访问 chatTools 免费体验GPT最新模型,包括o1推理模型、GPT4o 和Claude等模型! 随着人工智能技术的不断进步,多模态模型逐渐成为行业关注的焦点。智谱AI作为国内领先的人工智能公司,再次以创新姿态推出了首款免费多模态视觉模型…...
二、ubuntu单盘改软raid1
将单盘系统转换为软 RAID 1 是一个复杂的过程,尤其是在已经有数据的生产环境中进行时。这个过程涉及备份现有数据、创建 RAID 阵列、迁移数据以及更新引导加载程序(如 GRUB)。以下是详细的步骤指南: 前提条件 备份数据ÿ…...
「Mac玩转仓颉内测版45」小学奥数篇8 - 排列组合计算
本篇将通过 Python 和 Cangjie 双语讲解如何计算排列与组合。这道题目旨在让学生学会使用排列组合公式解决实际问题,并加深对数学知识和编程逻辑的理解。 关键词 小学奥数Python Cangjie排列与组合 一、题目描述 编写一个程序,计算从 n 个不同元素中取…...
【零成本抽象】基本概念与在C++中的实现
零成本抽象概念是由 Bjarne Stroustrup 提出的,他在 1994 年的著作中就有相关设想,2016 年其在 C++ 大会登台演讲时,明确阐述了 C++ 中的 “零成本抽象” 这一理念。 一、零成本抽象概念 Bjarne Stroustrup提出的零成本抽象概念,是指在编程中使用高级抽象机制时,不会产生…...
域渗透入门靶机之HTB-Cicada
easy难度的windows靶机 信息收集 端口探测 nmap -sT --min-rate 10000 -p- 10.10.11.35 -oA ./port 发现开放了53,88,389等端口,推测为域控 进一步信息收集,对爆破的端口进行更加详细的扫描 小tips:对于众多的端口&…...
(仓颉) Cangjie 刷力扣基础语法小结
文章目录 🧓官方资料🧓力扣经典前 3 题🕷️[1. 两数之和 - 力扣(LeetCode)](https://leetcode.cn/problems/two-sum/description/)🕷️[2. 两数相加 - 力扣(LeetCode)](https://leet…...
Phoenix5.1.3安装
环境说明 准备三台服务器,分别为:bigdata141(作为HBase主节点)、bigdata142、bigdata143,已经搭建好HBase集群,我这边HBase版本为2.2.7再准备一台服务器,bigdata144,可作为Phoenix客…...
深入理解 Apache Shiro:安全框架全解析
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
机器学习:全面学习路径指南
摘要: 本文精心规划了一条从入门到精通机器学习的学习路线,详细涵盖了基础理论构建、核心技术栈掌握、主流算法学习、实践项目锻炼以及前沿领域探索等多个关键阶段。通过逐步深入各个层面,介绍必备的数学知识、编程工具、经典与现代机器学习算…...
二叉树交换相关算法题|递归/非递归交换所有节点左右子树(C)
交换左右子树 设树B是一棵采用链式结构存储的二叉树,编写一个把树B中所有节点的左右子树进行交换的函数 算法思想 采用递归算法实现交换二叉树的左右子树,首先交换root节点左孩子的左右子树,然后交换root节点右孩子的左右子树,…...
什么是纯虚函数?什么是抽象类?纯虚函数和抽象类在面向对象编程中的意义是什么?
纯虚函数 纯虚函数是一个在基类中声明但不实现的虚函数。它的声明方式是在函数声明的末尾添加 0。这意味着这个函数没有提供具体的实现,任何继承这个基类的派生类都必须提供这个函数的实现,否则它们也会变成抽象类,无法实例化。 示例&#…...
高效利用资源:分布式有状态服务的高可靠性设计
在分布式系统设计中,实现有状态服务的高可靠性通常采用主备切换的方式。当主服务停止工作时,备服务接管任务,例如通过Keepalive实现VIP的切换以保证可用性。然而,这种方式存在资源浪费的问题,因为备服务始终处于空转状…...
网络安全中的 SOC 是什么?
当今世界,网络威胁日益增多,确保网络安全已成为各种规模企业的首要任务。网络安全讨论中经常出现的一个术语是 SOC,即安全运营中心的缩写。但网络安全中的 SOC 是什么呢? SOC在防御网络威胁、管理安全事件和全天候监控系统方面发…...
QtCreator UI界面 菜单栏无法输入中文
如下图红色所示的区域,直接输入是无法输入中文的: 解决方法:在右边的属性值里输入即可 也可以参考这位同学的解决方法:友情链接...
圆桌对话:AI数字笔迹,数字化时代的重要驱动力 | 2024 AI+数字笔迹创新应用发展论坛
12月6日,以“聚焦创新应用,AI引领赋能”为主题的2024 AI数字笔迹创新应用发展论坛在重庆两江新区举办。本届论坛由重庆市大数据应用发展管理局和重庆两江新区管理委员会联合指导,重庆亲笔签数字科技有限公司主办。 论坛现场一场题为“数字化…...
Tablesaw封装Plot.ly实现数据可视化
上文介绍tablesaw的数据处理功能,本文向你展示其数据可视化功能,并通过几个常用图表示例进行说明。 Plot.ly包装 可视化是数据分析的重要组成部分,无论你只是“查看”新数据集还是验证机器学习算法的结果。Tablesaw是一个开源、高性能的Java…...
在Linux(ubuntu22.04)搭建rust开发环境
1.安装rust 1.安装curl: sudo apt install curl 2.安装rust最新版 curl --proto ‘https’ --tlsv1.2 https://sh.rustup.rs -sSf | sh 安装完成后出现:Rust is installed now. Great! 重启当前shell即可 3.检验是否安装成功 rustc --version 结果出现&…...
Less和SCSS,哪个更好用?
前言 Less 和 SCSS 都是流行的 CSS 预处理器,它们的目的都是扩展 CSS 的功能,使样式表更具组织性、可维护性和可重用性。虽然它们有许多相似之处,但在语法、特性和工作方式上也存在一些差异。 Less Less 是一种动态样式表语言,…...
vuex作用及五大组成部分
Vuex 是 Vue.js 官方的状态管理工具,用于管理应用中的全局状态。它的作用主要是解决组件间的状态共享和数据同步问题,特别是在组件复杂嵌套或兄弟组件通信中提供清晰、结构化的解决方案。 Vuex 的作用 集中管理状态: 将组件的共享状态抽取出…...
vue借助西瓜播放器插件实现视频播放
西瓜播放器官网 西瓜播放器 安装 npm install xgplayer 使用案例 vue3为例 <script setup lang"ts"> import Player from xgplayer import { ref, unref, onMounted, watch, onBeforeUnmount, nextTick } from vue import xgplayer/dist/index.min.csscon…...
PHP无法读取.env的配置变量原因
今天帮一个客户在一台服务器配置laravel,在安装好宝塔后,配置了php环境,把laravel项目上传,并且在根目录的.env上配置好数据库等信息后,发现无法正常使用 通过排查发现.env的变量无法正常获取,排查了好久后…...
Android 15(V)新功能适配,雕琢移动细节之美
Android 15,内部代号为Vanilla Ice Cream,是Android移动操作系统的最新主要版本,于2024年2月16日在开发者预览版1中发布。Android 15源代码于 2024年9月4日发布。Android 15稳定版于2024年10月15日发布。 以下是针对 Android 15(…...
Qt自定义类型在信号槽中的使用
引言 示例自定义数据类型信号槽效果检查代码注册自定义类型信号槽使用QVariant传递参数总结附加绑定信号槽,传递的参数如果是自定义类型的变量,槽函数不会响应。为什么呢?是因为自定义类型没有被写入元对象系统,对于Qt来说,不认识这个数据类型,Qt是以事件来驱动的,信号槽…...
自适应卡尔曼滤波(包括EKF、UKF、CKF等)的创新思路——该调什么、不该调什么
在调节自适应卡尔曼滤波时,需要注意的参数和矩阵都对滤波器的性能有直接影响。本文给出详细的说明,包括相关公式和 MATLAB 代码示例 文章目录 需要调节的参数1. **过程噪声协方差矩阵 Q Q Q**:2. **测量噪声协方差矩阵 R R R**:…...
Ape-DTS:开源 DTS 工具,助力自建 MySQL、PostgreSQL 迁移上云
Ape-DTS 是一款高效、轻量级且功能强大的开源工具,专注于解决数据迁移、同步、校验、订阅与加工的需求。无论是将自建的 MySQL/PostgreSQL 数据库迁移到云端,还是在不同数据库间进行数据迁移,Ape-DTS 都能为您提供便捷且可靠的解决方案。它特…...