『 MySQL篇 』:MySQL表的聚合与联合查询

news/2024/4/29 0:14:06/文章来源:https://blog.csdn.net/m0_56361048/article/details/128940036
基础篇 MySQL系列专栏(持续更新中 …)
1『 MySQL篇 』:库操作、数据类型
2『 MySQL篇 』:MySQL表的CURD操作
3『 MySQL篇 』:MySQL表的相关约束
4『 MySQL篇 』:MySQL表的聚合与联合查询

目录

        • 一. 聚合查询
          • 1.1 聚合函数
          • 1.2 `GROUP BY`子句
          • 1.3 `HAVING`子句
        • 二 . 多表关系
        • 三、联合查询
          • 3.1 内连接
          • 3.2 外连接
          • 3.3 自连接
          • 3.4 合并查询
          • 3.4 子查询

一. 聚合查询

1.1 聚合函数

一般情况下,我们需要的聚合数据(总和,平均数,最大最小值等)并不总是存储在表中。 但是,可以通过执行存储数据的计算来获取它。

MySQL提供了许多聚合函数,包括AVGCOUNTSUMMINMAX等。除COUNT函数外,其它聚合函数在执行计算时会忽略NULL值 , 同时 , 聚合函数不允许嵌套使用 .

函数说明
count(列名或表达式)返回查询到的数据的个数
sum(列名或表达式)返回查询到的数据的和, (不是数字没有意义)
avg(列名或表达式)返回查询到的数据的平均值
max(列名或表达式)返回查询到的数据的最大值
min(列名或表达式)返回查询到的数据的最小值

以上的聚合函数可以在列名和表达式之前加上 distinct, 先对查询到的数据进行去重, 再进行计算

下面,我们将创建一组示例数据,对以上的聚合函数进行演示,

--- 创建学生成绩表
mysql> create table exam(-> id int primary key comment '学号',-> name varchar(20) comment '学生姓名',-> email varchar(50) not null comment '电子邮箱',-> chinese decimal(4,1) comment '语文成绩',-> english decimal(4,1) comment '英语成绩',-> math decimal(4,1)  comment'数学成绩'-> );
Query OK, 0 rows affected (0.02 sec)--- 插入学生成绩数据
mysql> insert into exam values(202301,'张华','123452@163.com',69,112,110),-> (202302,'李三','1452563@163.com',115.5,120,89),-> (202303,'宋七','36215465@qq.com',110,113,66),-> (202304,'王五','15547522@163.com',89,65,78),-> (202305,'赵四','15623355@163.com',90,112,130),-> (202306,'李八','18625222@163.com',null,null,null);
Query OK, 6 rows affected (0.01 sec)
Records: 6  Duplicates: 0  Warnings: 0---学生成绩表结构
mysql> desc exam;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | NO   | PRI | NULL    |       |
| name    | varchar(20)  | YES  |     | NULL    |       |
| email   | varchar(50)  | NO   |     | NULL    |       |
| chinese | decimal(4,1) | YES  |     | NULL    |       |
| english | decimal(4,1) | YES  |     | NULL    |       |
| math    | decimal(4,1) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)--- 数据详表
mysql> select * from exam;
+--------+------+------------------+---------+---------+-------+
| id     | name | email            | chinese | english | math  |
+--------+------+------------------+---------+---------+-------+
| 202301 | 张华 | 123452@163.com   |    69.0 |   112.0 | 110.0 |
| 202302 | 李三 | 1452563@163.com  |   115.5 |   120.0 |  89.0 |
| 202303 | 宋七 | 36215465@qq.com  |   110.0 |   113.0 |  66.0 |
| 202304 | 王五 | 15547522@163.com |    89.0 |    65.0 |  78.0 |
| 202305 | 赵四 | 15623355@163.com |    90.0 |   112.0 | 130.0 |
| 202306 | 李八 | 18625222@163.com |    NULL |    NULL |  NULL |
+--------+------+------------------+---------+---------+-------+
6 rows in set (0.01 sec)
  • count() 函数

使用 count() 函数 可以返回数据表中的行数 , 允许对表中所有符合特定条件的所有行进行计数 .

#计算表中的总行数
mysql> select count(*) from exam;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.01 sec#计算表中chinese中的总行数
mysql> select count(math) from exam;
+-------------+
| count(math) |
+-------------+
|           5 |
+-------------+
1 row in set (0.00 sec)#计算表中english列的总行数,并去重
mysql> select count(distinct english) from exam;
+-------------------------+
| count(distinct english) |
+-------------------------+
|                       4 |
+-------------------------+
1 row in set (0.01 sec)

COUNT(*)函数计算包含NULL和非NULL值的行,即:所有行 , 而count (列名) 进行计算时 , 不会将值为NULL的行计算在内, 即所有的非空行 . count(distinct 列名) 则会返回不包含空值的唯一行数 .

结合where语句进行使用

#查询exam表当中, 英语成绩为112的人数
mysql> select count(english) from exam where english = 112;
+----------------+
| count(english) |
+----------------+
|              2 |
+----------------+
1 row in set (0.00 sec)
  • sum() 函数

SUM()函数返回一组值的总和,SUM()函数忽略NULL值。如果找不到匹配行,则SUM()函数返回NULL值。

#计算数学成绩的总和, 并命名为emath
mysql> select sum(math) as emath from exam;
+-------+
| emath |
+-------+
| 473.0 |
+-------+
1 row in set (0.00 sec)#计算英语成绩低于120分的成绩总和
mysql> select sum(english) from exam where english < 120;
+--------------+
| sum(english) |
+--------------+
|        402.0 |
+--------------+
1 row in set (0.00 sec)
  • avg()函数

AVG()函数计算一组值的平均值。 它计算过程中是忽略NULL值的 , 使用 avg() 函数可以的到 一组数据的平均值 .

# 计算所有同学的语文成绩的平均值
mysql> select avg(chinese) from exam;
+--------------+
| avg(chinese) |
+--------------+
|     94.70000 |
+--------------+
1 row in set (0.03 sec)#计算总分的平均分
mysql> select avg(math+chinese+english) as 总均分 from exam;
+-----------+
| 总均分    |
+-----------+
| 293.70000 |
+-----------+
1 row in set (0.00 sec)
  • MAX()函数

MAX()函数返回一组值中的最大值。MAX()函数在许多查询中非常方便,例如查找最大数量,最昂贵的产品以及客户的最大付款数等 .

# 查询总分最高的同学总分
mysql> select max(math+english+chinese) as 总成绩 from exam;
+--------+
| 总成绩 |
+--------+
|  332.0 |
+--------+
1 row in set (0.00 sec)#查询单科英语成绩的最高分的姓名
mysql>  select max(english) from exam;
+--------------+
| max(english) |
+--------------+
|        120.0 |
+--------------+
1 row in set (0.00 sec)

不使用max()函数的情况 , 也可以使用order by 对数据集进行降序,并使用limit字句对结果集进行降序排序

mysql> select (chinese+math+english) as total  from exam order by total desc limit 1;
+-------+
| total |
+-------+
| 332.0 |
+-------+
1 row in set (0.00 sec)

如果要找到总成绩最高的同学的全部信息 , 需要使用子查询进行

# 查询总成绩最高的同学信息
mysql> select *-> from exam-> where chinese+math+english = (select max(chinese+math+english)->                               from exam->                              );
+--------+------+------------------+---------+---------+-------+
| id     | name | email            | chinese | english | math  |
+--------+------+------------------+---------+---------+-------+
| 202305 | 赵四 | 15623355@163.com |    90.0 |   112.0 | 130.0 |
+--------+------+------------------+---------+---------+-------+
1 row in set (0.00 sec)
  • Min()函数

Min()函数用于返回一组值当中的最小值 , 通常用于 查询一组数据当中最小的值 , 如 最小单价, 最小分数 等 , 和 max() 函数的用法类似 。

# 查询最小的总分
mysql> select min(math + english + chinese) as total from exam;
+-------+
| total |
+-------+
| 232.0 |
+-------+
1 row in set (0.00 sec)#查询最小总分的全部信息
mysql> select * from exam where chinese+english+math = (select min(math + english + chinese) as                                      total from exam);
+--------+------+------------------+---------+---------+------+
| id     | name | email            | chinese | english | math |
+--------+------+------------------+---------+---------+------+
| 202304 | 王五 | 15547522@163.com |    89.0 |    65.0 | 78.0 |
+--------+------+------------------+---------+---------+------+
1 row in set (0.00 sec)

MySQL 当中除了一些常用的聚合函数外 , 还包括一些字符串函数 , 日期时间函数 , 控制流函数等 , 下面再列举一些比较常见的其他函数 .

  • IFNULL函数

IFNULL函数 是MySQL控制流函数之一,它接受两个参数 , 如果不是 NULL ,则返回第一个参数,否则IFNULL函数 返回第二个参数

IFNULL(expression_1,expression_2);

如果expression_1不为NULL,则IFNULL函数返回expression_1; 否则返回expression_2的结果。

示例表如下所示:

image-20230206203358641

#查找某位同学的联系方式 (如果电话为空,使用邮箱)
mysql> select name,ifnull(phone,email) as 联系方式 from exam;
+------+------------------+
| name | 联系方式         |
+------+------------------+
| 张华 | 13225631456      |
| 李三 | 15698475235      |
| 宋七 | 15236486952      |
| 王五 | 15547522@163.com |
| 赵四 | 13562698745      |
| 李八 | 18625222@163.com |
+------+------------------+
6 rows in set (0.00 sec)#其中,王五和李八的电话为空,则使用其电子邮箱作为其联系方式。
  • 日期、时间函数
now()函数返回当前日期和时间。
month()函数返回一个表示指定日期的月份的整数。
year()函数返回日期值的年份部分。
dayname()函数获取指定日期的工作日的名称。
round(数据,n) 函数表示返回的数据保留n位小数
mysql> select year('2018-01-01');
+--------------------+
| year('2018-01-01') |
+--------------------+
|               2018 |
+--------------------+
1 row in setmysql> select dayname('2018-01-01') dayname;
+---------+
| dayname |
+---------+
| Monday  |
+---------+
1 row in set
1.2 GROUP BY子句

GROUP BY子句通过列或表达式的值将一组行分组为一个小分组的汇总行记录。 GROUP BY子句为每个分组返回一行。换句话说,它减少了结果集中的行数,当GROUP BY子句与聚合函数相结合时, 可以返回每个分组的单个值。

#示例职工表
mysql> create table emp(->  id int primary key auto_increment,->  name varchar(20) not null,->  role varchar(20) not null,->  salary numeric(11,2)-> );
Query OK, 0 rows affected (0.05 sec)
mysql> insert into emp(name, role, salary) values-> ('张三','科员', 2000.54),-> ('宋七','副厅', 8996.99),-> ('赵四','科员', 1800.11),-> ('李八','科长', 4540.5),-> ('宋九','科员', 2356.33);
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0mysql> select * from emp;
+----+------+------+---------+
| id | name | role | salary  |
+----+------+------+---------+
|  1 | 张三 | 科员 | 2000.54 |
|  2 | 宋七 | 副厅 | 8996.99 |
|  3 | 赵四 | 科员 | 1800.11 |
|  4 | 李八 | 科长 | 4540.50 |
|  5 | 宋九 | 科员 | 2356.33 |
+----+------+------+---------+
5 rows in set (0.00 sec)

对职工表进行分组查询 , 查询已知数据当中每个职位的最低和最高工资

mysql> select role,max(salary),min(salary) from emp group by role;
+------+-------------+-------------+
| role | max(salary) | min(salary) |
+------+-------------+-------------+
| 副厅 |     8996.99 |     8996.99 |
| 科员 |     2356.33 |     1800.11 |
| 科长 |     4540.50 |     4540.50 |
+------+-------------+-------------+
3 rows in set (0.00 sec)
1.3 HAVING子句

GROUP BY子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要使用 HAVING子句

再次对上述的职工表进行操作,找出最高工资大于4000的职工职位角色和工资

mysql> select role,max(salary) from emp group by role having max(salary) > 4000;
+------+-------------+
| role | max(salary) |
+------+-------------+
| 副厅 |     8996.99 |
| 科长 |     4540.50 |
+------+-------------+
2 rows in set (0.00 sec)

条件筛选可以使用where, order by, limit等来实现,也可以不使用

HAVING子句和where语句的使用区别

  • 分组之前指定条件, 也就是先筛选再分组, 使用where关键字.
  • 分组之后指定条件, 也就是先分组再筛选, 使用group by关键字

wheregroup by语法上要注意区分, where语句紧跟在表名后, 而having跟在group by后 .

示例:查询工资小于5000的职工中,各职工角色的平均工资(保留两位小数)

mysql> select role,round(avg(salary)) from emp where salary < 5000 group by role;+------+--------------------+
| role | round(avg(salary)) |
+------+--------------------+
| 科员 |               2052 |
| 科长 |               4541 |
+------+--------------------+
2 rows in set (0.01 sec)

二 . 多表关系

  • 概述

​ 项目开发当中,在进行数据库的表结构设计时,会根据业务需求和业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着某种联系 , 基本上分为三种: 一对多/多对多/一对一.

  • 一对多(多对一)

案例 : 班级与学生的关系

关系 : 一个班级拥有多个学生 , 一个学生属于一个班级

实现 : 在多的 一方(学生) 建立外键, 指向另一方的主键

image-20230207214841033

  • 多对多

案例 : 学生与课程的关系

关系 :一名学生可以选修多门课程 , 一门课程也可以供多个学生来选择 .

实现 : 建立第三张中间表, 中间表中至少包含两个外键,分别关联两表的主键

image-20230207215409238
  • 一对一

案例 : 用户与用户详情之间的关系

关系 : 多用于单表拆分 , 将一张表的基础字段放在一张表当中 , 其他详情字段放在另一张表当中,以提升操作效率

实现 : 在任意一方加入外键,关联另一方的主键 , 并设置外键是唯一的

image-20230207215856625

三、联合查询

实际开发当中往往要使用多个表的的数据,所以需要多表联合查询 , 多表联合查询时是对多张表的数据取笛卡尔积 , 然后对联合表中筛选出需要的数据

img

对n条记录的表A和m条记录的表B进行笛卡尔积,一共会产生n*m条记录, 当两张表的数据量很大的时候, 这个操作就非常危险了 , 需要慎重使用

mysql> select * from class;
+----------+------------+
|    id    |   name     |
+----------+------------+
|        1 | 计科1|
|        2 | 计科2|
+----------+------------+
2 rows in set (0.00 sec)mysql> select * from student;
+------+--------+----------+
| id   | name   | class_id |
+------+--------+----------+
|    1 | 张三   |        1 |
|    2 | 李四   |        1 |
|    3 | 王五   |        2 |
|    4 | 赵六   |        2 |
+------+--------+----------+#两个表进行笛卡尔集之后可以得到结果
mysql> select * from student, class;
+------+--------+----------+----------+------------+
| id   | name   | class_id |   id     | name       |
+------+--------+----------+----------+------------+
|    1 | 张三   |        1 |        1 | 计科1|
|    1 | 张三   |        1 |        2 | 计科2|
|    2 | 李四   |        1 |        1 | 计科1|
|    2 | 李四   |        1 |        2 | 计科2|
|    3 | 王五   |        2 |        1 | 计科1|
|    3 | 王五   |        2 |        2 | 计科2|
|    4 | 赵六   |        2 |        1 | 计科1|
|    4 | 赵六   |        2 |        2 | 计科2|
+------+--------+----------+----------+------------+
8 rows in set (0.00 sec)

上述两表进行笛卡尔集之后 , 得到了 4 * 2 即 8 条的结果 , 在这之中只有class_id相同的数据才是有效数据 , 所以要添加限制条件 才能筛选出有效数据

3.1 内连接

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

  • 隐式内连接
select 字段列表 from1 ,表2 where ... = .. .;
  • 显式内连接
select  字段列表 from1 inner join2 on 连接条件

以上述两张学生表和课程表为例 , 查询一名学生的姓名 , 以及该学生所在的班级名称

#隐式内连接
mysql> select student.name, class.name from class,student->       where student.class_id = class.id;
+------+---------+
| name | name    |
+------+---------+
| 张三 | 计科1|
| 李四 | 计科1|
| 王五 | 计科2|
| 赵六 | 计科2|
+------+---------+
4 rows in set (0.01 sec)
# 也可以对表名起一个别名
mysql> select s.name, c.name from class c,student s->   where s.class_id = c.id;
+------+---------+
| name | name    |
+------+---------+
| 张三 | 计科1|
| 李四 | 计科1|
| 王五 | 计科2|
| 赵六 | 计科2|
+------+---------+
4 rows in set (0.00 sec)#显式内连接
mysql>  select student.name, class.name from student inner join class on student.class_id = class.id;
+------+---------+
| name | name    |
+------+---------+
| 张三 | 计科1|
| 李四 | 计科1|
| 王五 | 计科2|
| 赵六 | 计科2|
+------+---------+
4 rows in set (0.03 sec)
3.2 外连接
  • 左外连接
image-20230208103635828

相当于查询表1(左表)所有的数据包含表1和表2交集部分的数据

select 字段列表 from1 left join2 on 条件 ... ;
  • 右外连接
image-20230208103943344

相当于查询表2(右表)的所有数据 , 包含表1 和表2 交集部分的数据

select  字段列表 from1 right join2 on 条件 ....;

示例:

#表结构如下所示
mysql> select * from class;
+----+---------+
| id | name    |
+----+---------+
|  1 | 计科1|
|  2 | 计科2|
|  3 | NULL    |
+----+---------+
3 rows in set (0.00 sec)mysql> select * from student;
+----+------+----------+
| id | name | class_id |
+----+------+----------+
|  1 | 张三 |        1 |
|  2 | 李四 |        1 |
|  3 | 王五 |        2 |
|  4 | 赵六 |        2 |
|  5 | 宋六 |     NULL |
+----+------+----------+
5 rows in set (0.01 sec)mysql> select * from student left join class on student.class_id = class.id;
+----+------+----------+------+---------+
| id | name | class_id | id   | name    |
+----+------+----------+------+---------+
|  1 | 张三 |        1 |    1 | 计科1|
|  2 | 李四 |        1 |    1 | 计科1|
|  3 | 王五 |        2 |    2 | 计科2|
|  4 | 赵六 |        2 |    2 | 计科2|
|  5 | 宋六 |     NULL | NULL | NULL    |
+----+------+----------+------+---------+
5 rows in set (0.00 sec)mysql> select * from class left join student on class.id = student.class_id;
+----+---------+------+------+----------+
| id | name    | id   | name | class_id |
+----+---------+------+------+----------+
|  1 | 计科1|    1 | 张三 |        1 |
|  1 | 计科1|    2 | 李四 |        1 |
|  2 | 计科2|    3 | 王五 |        2 |
|  2 | 计科2|    4 | 赵六 |        2 |
|  3 | NULL    | NULL | NULL |     NULL |
+----+---------+------+------+----------+
5 rows in set (0.00 sec)#使用左外连接或者右外连接的前提一般是 , 需求的列中部分元素为空值,直接使用内连接无法显示出来,所以采用左外连接或者 右外连接
3.3 自连接

自连接指的是在同一张表内连接自身进行查询 ,自连接查询可以是内连接查询也可以是外连接查询 . (自连接查询中表必需起别名)

select 字段列表 from 表A 别名A join 表A 别名B on 条件

案例 : 员工表中包含以下字段 : 员工 id , 员工姓名 name,员工年龄 age , 员工领导managerid

# 查询员工以及所属领导的名称 (内)
select a.name,b.name  from emp a,emp b  where a.managerid = b.id;
(查询的结果不包含领导为null的字段)
# 查询所有员工及其领导的名字 , 如果员工没有领导, 也需要查询出来
select a.name '员工',b.name '领导' from emp a left join emp b on a.managerid = b.id;
#使用左外连接会将所有员工的姓名全部显示出来, 包括没有领导的
3.4 合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用UNION和UNION ALL时,前后查询的结果集中,字段需要一致。

  • union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行(合并后的结果中包含重复行)

select * from course where id<3
union all
select * from course where name= '数据结构';
# 当查询字段不一致时会报错
  • union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行

select * from course where id<3
union 
select * from course where name= '数据结构';

同理 or

select * from course where id < 3 or name = '数据结构';

union查询时,在索引列查询速度快,or,in采用的是全表扫描机制更适用于非索引列查找。

3.4 子查询
  • 概念 : SQL语句中嵌套select语句 , 称为嵌套查询 , 又称子查询 .
select * from table1 where column1 = (select column1 fropm table2);

子查询外部的语句可以是 : INSERT / UPDATE / SELECT 中的任何一个

  • 标量子查询

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

#查询张三同学的同班同学
select * from student where class_id =(select class_id from student where name = '张三');
  • 列子查询

子查询返回的结果是 一列(可以是多行) ,这种子查询称为列子查询 .

常用的操作符为 : IN , NOT IN , ANY ,ALL

image-20230208164933293

#  查询选修课程名称为语文或者英语的分数信息 (in)
select * from score where course_id in 
(select id from course where name='语文' or name='英文');#查询语文课程分数大于其他任意一名学生的信息(any)
select * from score where grade>any(select grade from score where course_id = (select class_id from student where name = '语文'));
  • exists关键字

exists( )内子查询语句返回结果不为空,说明where条件成立就会执行主sql语句。如果为空就表示where条件不成立,sql语句就不会执行。not exists 和 exists相反,子查询语句结果为空,则表示where条件成立,执行sql语句。否则不执行。

  • 在from子句中使用子查询:子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用
-- 获取“计算机1班”的平均分,将其看作临时表
select avg( sco.score ) score from 
score sco
join student stu ON sco.student_id = stu.id
join classes cls ON stu.classes_id = cls.id
where cls.NAME = '计算机1班';

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

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

相关文章

Python将字典转换为csv

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

MySQL篇02-三大范式,多表查询

数据入库时,由于数据设计不合理&#xff0c;会存在数据重复、更新插入异常等情况, 故数据库中表的设计遵循的设计规范&#xff1a;三大范式1.第一范式(1NF)要求数据库的每一列都是不可分割的原子数据项&#xff0c;即原子性。强调的是列的原子性&#xff0c;即数据库中每一列的…

攀升MaxBook P2电脑U盘重装系统方法教学

攀升MaxBook P2电脑U盘重装系统方法教学。攀升MaxBook P2电脑是一款性价比非常高的笔记本。有用户购买了这款电脑后&#xff0c;想要将系统进行重装。今天和大家分享一个U盘重装系统的方法&#xff0c;学会这个方法后以后就可以自己轻松去重装电脑系统了。接下来一起看看具体的…

相机坐标系的正向投影和反向投影

1 、正向投影: 世界坐标系到像素坐标系 世界3D坐标系(x, y, z) 到图像像素坐标(u,v)的映射过程 &#xff08;1&#xff09;世界坐标系到相机坐标系的映射。 两个坐标系的转换比较简单&#xff0c;就是旋转矩阵 平移矩阵&#xff0c;旋转矩阵则是绕X&#xff0c; Y&#xff…

Thread 类及常见方法

Thread 类是 JVM 用来管理线程的一个类&#xff0c;换句话说&#xff0c;每个线程都有一个唯一的 Thread 对象与之关联。用我们上面的例子来看&#xff0c;每个执行流&#xff0c;也需要有一个对象来描述&#xff0c;类似下图所示&#xff0c;而 Thread 类的对象就是用来描述一…

分享111个JS焦点图代码,总有一款适合您

分享111个JS焦点图代码&#xff0c;总有一款适合您 111个JS焦点图代码下载链接&#xff1a;https://pan.baidu.com/s/1GxjW5m9DNOPEQd-Qf_gGSA?pwd4aci 提取码&#xff1a;4aci Python采集代码下载链接&#xff1a;https://wwgn.lanzoul.com/iKGwb0kye3wj jQuery宽屏左右…

没有人能比我快,用Python写一个自动填写答案的脚本

前言 不是标题党&#xff0c;真的就是没有人比我快&#xff0c;今天用Python写了个自动填写答案的脚本&#xff0c;快就算了&#xff0c;准确率还是百分之百 话不多说 咱先看代码 后看效果 不想看全文的 点击文末名片 领取源码 环境使用 Python 3.8Pycharm 模块使用 imp…

Request Method: OPTIONS

节选自https://blog.csdn.net/Amnesiac666/article/details/121105088版权归原作者所有&#xff0c;如有侵权请联系删除Request Method: OPTIONS一些接口在请求时&#xff0c;会自动发送一个的请求&#xff0c;我查了一遍代码&#xff0c;不是代码中写明的。 网上给出的解释涉及…

Pinecone:一款专为红队研究人员设计的WLAN网络安全审计框架

关于Pinecone Pinecone是一款专为红队研究人员设计的WLAN网络安全审计框架&#xff0c;该工具基于模块化开发&#xff0c;允许广大研究人员根据任务需求进行自定义功能扩展。Pinecone设计之初专用于树莓派&#xff0c;可以将树莓派打造为便携式无线网络安全审计工具&#xff0…

java面试题(十六)springBoot

1.1 说说你对Spring Boot的理解 参考答案 从本质上来说&#xff0c;Spring Boot就是Spring&#xff0c;它做了那些没有它你自己也会去做的Spring Bean配置。Spring Boot使用“习惯优于配置”的理念让你的项目快速地运行起来&#xff0c;使用Spring Boot很容易创建一个能独立运…

广告深度学习计算:向量召回索引的演进以及工程实现

问题定义召回操作通常作为搜索/推荐/广告的第一个阶段&#xff0c;主要目的是从巨大的候选集中选出相对合适的条目&#xff0c;交由后链路的排序等流程进行进一步的择优。因此&#xff0c;召回问题本质上就是一个大规模的最值的搜索问题&#xff1a;对于评分 和候选集 &#x…

最短路之Dijkstra(15张图解)

&#x1f33c;多年后再见你 - 乔洋/周林枫 - 单曲 - 网易云音乐 闲来无事听听歌 Dijkstra可解决“单源最短路径”问题 四种最短路算法 Floyd算法 时间复杂度高&#xff0c;但实现容易&#xff08;5行核心代码&#xff09;&#xff0c;可解决负权边&#xff0c;适用于数据范围…

方法的定义与使用详解

我们常用创建一个class修饰的就是一个类 其中有一个main方法&#xff0c;是主要的启动方法 这里写目录标题我们正常修饰的方法是由返回值的&#xff0c;但是用void修饰的没有static的使用方法中形参和实参的使用值传递引用传递类跟对象的关系this构造器--构造方法这个&#xf…

uniapp+java/springboot实现微信小程序APIV3支付功能

微信小程序的支付跟H5的支付和APP支付流程不一样&#xff0c;本次只描述下小程序支付流程。 一.账号准备 1.微信小程序账号 文档&#xff1a;小程序申请 小程序支付需要先认证&#xff0c;如果你有已认证的公众号&#xff0c;也可以通过公众号免费注册认证小程序。 一般30…

自定义input[type=file]上传按钮样式的四种方案,你知道几种?

目录前言方案1 opacity: 0;实现方案2 display:none样式元素选择 &#xff1a;label样式元素选择&#xff1a;其他元素::file-selector-button兼容性用法&#x1f9e8;&#x1f9e8;&#x1f9e8; 大家好&#xff0c;我是搞前端的半夏 &#x1f9d1;&#xff0c;一个热爱写文的前…

二、Linux文件 - Open函数讲解实战

目录 1.Open函数讲解 2.open函数实战 2.1 man 1 ls 查询Shell命令 2.2 man 2 open 查看系统调用函数 2.3项目实战 1.Open函数讲解 高频使用的Linux系统调用&#xff1a;open write read close Linux自带的工具&#xff1a;man手册&#xff1a; man 1是普通的shell…

【树和二叉树】数据结构二叉树和树的概念认识

前言&#xff1a;在之前&#xff0c;我们已经把栈和队列的相关概念以及实现的方法进行了学习&#xff0c;今天我们将认识一个新的知识“树”&#xff01;&#xff01;&#xff01; 目录1.树概念及结构1.1树的概念1.2树的结构1.3树的相关概念1.4 树的表示1.5 树在实际中的运用&a…

全国青少年编程等级考试scratch二级真题2022年9月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手1.数列&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;6&#xff0c;…

程序的编译与链接(C语言为例) #代码写好后到运行期间要经过怎样的过程呢?# 粗略版 #

编译与链接前言程序的环境程序的编译与链接写在最后前言 每当我们运行一段代码时&#xff0c;编译器都会自动的帮我们编译代码并将代码转换为一个二进制可执行文件&#xff08;.exe&#xff09;&#xff0c; 有了这个可执行文件&#xff0c;便可以执行我们写的程序了。那么编译…

基于风光储能和需求响应的微电网日前经济调度(Python代码实现)【1】

目录 1 概述 2 知识点及数学模型 3 算例实现 3.1算例介绍 3.2风光参与的模型求解 3.3 风光和储能参与的模型求解 3.5 风光储能和需求响应都参与模型求解 3.6 结果分析对比 4 Python代码及算例数据 1 概述 近年来&#xff0c;微电网、清洁能源等已成为全球关注的热点…