MySQL中的高级查询

通过条件查询可以查询到符合条件的数据,但如同要实现对字段的值进行计算、根据一个或多个字段对查询结果进行分组等操作时,就需要使用更高级的查询,MySQL提供了聚合函数、分组查询、排序查询、限量查询、内置函数以实现更复杂的查询需求。接下来将针对这些高级查询的知识进行讲解。

1.聚合函数

在实际开发中,经常需要做一些数据统计操作,例如统计某个字段的最大值、最小值、平均值等。像这样对一组值执行计算并将计算后的值返回的操作称为聚合操作,聚合操作一般通过聚合函数实现。使用聚合函数实现查询的基本语法格式如下。

SELECT [字段名1,字段名2,···,字段名n] 聚合函数 FROM 数据表名;

MySQL中常用的聚合函数如下:

COUNT(e)

返回查询的记录总数,参数e可以是字段名或*

SUM(e)

返回e字段中值的总和

AVG(e)

返回e字段中值的平均值

MAX(e)

返回e字段中的最大值

MIN(e)

返回e字段中的最小值

上面的聚合函数都是MySQL中内置的函数,使用者根据函数的语法格式直接调用即可。

接下来,通过一些例子学习聚合函数在数据统计中的使用。

为了方面演示,我把之前的员工表删了,又创建了一个员工表并插入了一些数据:

mysql> CREATE TABLE emp(-> empno INT PRIMARY KEY,-> ename VARCHAR(16),-> job VARCHAR(16),-> sal INT,-> bon INT-> );
Query OK, 0 rows affected (0.01 sec)mysql> DESC emp;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| empno | int         | NO   | PRI | NULL    |       |
| ename | varchar(16) | YES  |     | NULL    |       |
| job   | varchar(16) | YES  |     | NULL    |       |
| sal   | int         | YES  |     | NULL    |       |
| bon   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

表格介绍:

empno:员工编号

ename :员工姓名

job:职位

sal:工资

bon:奖金

插入语句:

mysql> INSERT INTO emp VALUES-> (9880,'张三','销售',3000,200),-> (9885,'李四','保洁',2500,100),-> (9775,'王五','销售',3500,500),-> (9900,'孙七','销售',2500,200),-> (9990,'周八','经理',7000,1000)-> (9770,'吴九','保洁',2500,null),-> (9888,'郑十','销售',3500,null);
Query OK, 7 rows affected (0.01 sec)
Records: 7  Duplicates: 0  Warnings: 0

表中的具体内容如下:

mysql> SELECT*FROM emp;
+-------+--------+--------+------+------+
| empno | ename  | job    | sal  | bon  |
+-------+--------+--------+------+------+
|  9770 | 吴九   | 保洁   | 2500 | NULL |
|  9775 | 王五   | 销售   | 3500 |  500 |
|  9880 | 张三   | 销售   | 3000 |  200 |
|  9885 | 李四   | 保洁   | 2500 |  100 |
|  9888 | 郑十   | 销售   | 3500 | NULL |
|  9900 | 孙七   | 销售   | 2500 |  200 |
|  9990 | 周八   | 经理   | 7000 | 1000 |
+-------+--------+--------+------+------+
7 rows in set (0.00 sec)

1.COUNT()函数

COUNT()函数用于检索数据表行中的值的计数,COUNT(*)可以统计数据表中记录的总条数,即数据表中有多少行记录。例如,想要使用SQL语句查询员工表中有多少个员工的记录。在查询时可以使用COUNT()函数进行统计,具体SQL语句及执行结果如下。

mysql> SELECT COUNT(*) FROM emp;

+----------+

| COUNT(*) |

+----------+

| 7 |

+----------+

1 row in set (0.00 sec)

由上述执行结果可以得出,数据表emp中有7条记录,也就是说员工表中有7个员工的记录。

COUNT()函数中的参数除可以使用*号,还可以使用字段的名称。两者不同的是,使用COUNT(*)统计结果时,相当于统计数据表的行数,不会忽略字段中值为NULL的行;如果使用COUNT(字段)统计,那么字段值为NULL的记录不会被统计。例如,想要使用SQL语句查询员工表中奖金不为NULL的员工个数,具体SQL语句及执行结果如下。

mysql> SELECT COUNT(bon) FROM emp;
+------------+
| COUNT(bon) |
+------------+
|          5 |
+------------+
1 row in set (0.00 sec)

由上述执行结果可以得出,数据表emp中奖金不为NULL的员工有5个。

2.SUN()函数

如果字段中存放的是数值型数据,需要统计该字段中所有值的总数,可以使用SUM()函数。SUM()函数会对指定字段中的值进行累加,并且在数据累加时忽略字段中的NULL值。

例如,想要使用SQL语句查询员工表中员工奖金的总和。可以在查询时使用SUM()函数进行统计,具体SQL语句及执行结果如下。

mysql> SELECT SUM(bon) FROM emp;
+----------+
| SUM(bon) |
+----------+
|     2000 |
+----------+
1 row in set (0.00 sec)

上述SELECT语句使用SUM()函数对COMM字段中的值进行求和统计,执行结果中显示员工奖金总和为2000元。

3.AVG()函数

如果字段中存放的是数值型数据,需要统计该字段中所有值的平均值,可以使用AVG()函数。AVG()函数会计算指定字段值的平均值,并且计算时会忽略字段中的NULL值。

例如,想要使用SQL语句查询员工表中员工的平均奖金。查询时可以使用AVG()函数进行统计,具体SQL语句及执行结果如下。

mysql> SELECT AVG(bon) FROM emp;
+----------+
| AVG(bon) |
+----------+
| 400.0000 |
+----------+
1 row in set (0.00 sec)

上述SELECT语句使用AVG()函数计算bon字段的平均值。由执行结果可以得出,bon字段的平均值为400.0000。AVG()函数在计算时会忽略bon字段中的NULL值,即只对非NULL的数值进行累加,然后将累加和除以非NULL的行数计算出平均值。

上面已经设置了是五个人有奖金,有两个是没有奖金的,奖金是空值,因此那两个人也不会计算入内。

如果想要统计所有员工的平均奖金,即奖金平均到所有员工身上,可以借助IFNULL()函数。

IFNULL(v1,v2)

上述格式表示,如果v1的值不为NULL,则返回v1的值,否则返回v2。例如,想要使用SQL语句查询所有员工的平均奖金。查询时可以调用AVG()函数和IFNULLO函数进行统计,先调用IFNULL()函数将bon字段中所有的NULL值转换为0,再调用AVG()函数统计平均值,具体SQL语句及执行结果如下。

mysql> SELECT AVG(IFNULL(BON,0)) FROM emp;
+--------------------+
| AVG(IFNULL(BON,0)) |
+--------------------+
|           285.7143 |
+--------------------+
1 row in set (0.00 sec)

上述SELECT语句在执行AVG()函数之前调用IFNULL()函数对bon字段中的值进行判断,如果是NULL值就转换成0返回;由执行结果并结合数据表中的数据可以得出,本次统计的平均奖金是所有员工的平均奖金。

4.MAX()函数

MAX(函数用于计算指定字段中的最大值,如果字段的值是数值类型,则比较的是值的大小。例如,想要使用SQL语句查询员工表中最高的工资。查询时可以使用MAX()函数进行计算,具体SQL语句及执行结果如下。

mysql> SELECT MAX(sal) FROM emp;
+----------+
| MAX(sal) |
+----------+
|     7000 |
+----------+
1 row in set (0.00 sec)

上述SELECT语句使用MAX()函数获取了sal字段中最大的数值。

5.MIN()函数

MIN()函数用于计算指定字段中的最小值,如果字段的值是数值类型,则比较的是值的大小。例如,想要使用SQL语句查询员工表中最低的工资。查询时可以使用MIN()函数进行计算,具体SQL语句及执行结果如下。

mysql> SELECT MIN(sal) FROM emp;
+----------+
| MIN(sal) |
+----------+
|     2500 |
+----------+
1 row in set (0.00 sec)

在上述代码中,使用MIN()函数获取了sal字段中最小的数值。

分组查询

在对数据表中的数据进行统计时,有时需要按照一定的类别作统计。例如,财务在统计每个部门的工资总数时,属于同一个部门的所有员工就是一个分组。在MySQL中,可以使用GROUP BY根据指定的字段结果集进行分组,如果某些记录的指定字段具有相同的价值,那么分组后被合并为一条数据。使用GROUP BY分组查询的语法如下:

1.单独使用GROUP BY 分组

单独使用GROUP BY进行分组时将根据指定的字段合并数据行。例如,我们想要使用SQL语句查询员工表的职位有有哪几种,具体SQL语句及执行结果如下:

mysql> SELECT job FROM emp GROUP BY job;
+--------+
| job    |
+--------+
| 保洁   |
| 销售   |
| 经理   |
+--------+
3 rows in set (0.00 sec)

在上述SELECT语句中,使用GROUP BY根据job字段中的值对数据表中的记录进行分组;从执行结果来看,员工的职位一共有三种。

2.GROUP BY和聚合函数一起使用

如果分组查询时要进行统计汇总,此时需要将GROUP BY和聚合函数一起使用。例如,统计员工表各部门的薪资总和或平均薪资,可以使用GROUP BY和聚合函数AVG()、SUM()进行统计,具体SQL语句及执行结果如下:

mysql> SELECT job,AVG(sal),SUM(sal) FROM emp GROUP BY job;
+--------+-----------+----------+
| job    | AVG(sal)  | SUM(sal) |
+--------+-----------+----------+
| 保洁   | 2500.0000 |     5000 |
| 销售   | 3125.0000 |    12500 |
| 经理   | 7000.0000 |     7000 |
+--------+-----------+----------+
3 rows in set (0.01 sec)

在上述SELECT语句中,使用GROUP BY根据job字段中的值对数据表的记录进行分组,值相同的为一组,并计算出各个职位的总工资和平均工资。

3.GROUP BY和HAVING关键字一起使用

通常情况下GROUP BY和HAVING关键字一起使用,用于对分组后的结果进行条件过滤。例如,假如我们想要使用SQL语句查询员工表中的平均工资小于3000的部门编号及这些部门的平均工资。查询时可以使用GROUP BY和HAVING进行统计,具体SQL语句及执行结果如下:

mysql> SELECT empno,AVG(sal) FROM emp GROUP BY empno HAVING AVG(sal)<3000;
+-------+-----------+
| empno | AVG(sal)  |
+-------+-----------+
|  9770 | 2500.0000 |
|  9885 | 2500.0000 |
|  9900 | 2500.0000 |
+-------+-----------+
3 rows in set (0.00 sec)

在上述SELECT语句中,使用GROUP BY根据empno字段中的值对数据表的记录进行分组,并且使用HAVING筛选平均工资小于3000的数据,最终返回了平均工资小于3000的部门编号及平均工资。

在MySQL中,HAVING 子句用于在 GROUP BY 子句后对聚合结果进行过滤。它通常与聚合函数(如 SUM(), COUNT(), AVG(), MAX(), MIN() 等)一起使用,以筛选满足特定条件的分组。

与 WHERE 子句不同,WHERE 子句在聚合之前对单个记录进行过滤,而 HAVING 子句在聚合之后对分组进行过滤。这一点不要弄错哦。

排序查询

对数据表的数据进行查询时,可能查询出来的数据是无序的,或者其排列顺序不是用户期望的。如果想要对查询结果按指定的方式排序,例如对员工信息按姓名顺序排列等,可以使用ORDER BY对查询结果进行排序。查询语句中使用ORDER BY的基本语法格式如下。

SELECT*|{字段名1,字段名2,···} FROM 表名 ORDER BY 字段名1 [ASC | DESC], 字段名2 [ASC | DESC]......

在上面的语法格式中,ORDER BY后指定的字段名1、字段名2等是对查询结果排序的依据,即按照哪一个字段进行排序。参数ASC表示按照升序进行排序,DESC表示按照降序进行排序。

使用ORDER BY对查询结果进行排序时,如果不指定排序方式,默认按照ASC方式进行排序。例如,技术人员想要使用SQL语句查询员工表中职位为销售的员工信息,查询出的结果根据员工工资升序排列,具体SQL语句及执行结果如下:

mysql> SELECT * FROM emp WHERE job='销售' ORDER BY sal;
+-------+--------+--------+------+------+
| empno | ename  | job    | sal  | bon  |
+-------+--------+--------+------+------+
|  9900 | 孙七   | 销售   | 2500 |  200 |
|  9880 | 张三   | 销售   | 3000 |  200 |
|  9775 | 王五   | 销售   | 3500 |  500 |
|  9888 | 郑十   | 销售   | 3500 | NULL |
+-------+--------+--------+------+------+
4 rows in set (0.00 sec)

上述SELECT语句使用ORDER BY对job字段值为销售的所有记录按照工资从低到高进行排序,即sal字段的值按升序排序。因为没有设置怎么排序,所以默认ASC升序排序。

要注意的是如果有字段中的值为NULL,那么NULL会被当做最小值进行排序,下面按照奖金对销售员工进行排序:

mysql> SELECT * FROM emp WHERE job='销售' ORDER BY bon;
+-------+--------+--------+------+------+
| empno | ename  | job    | sal  | bon  |
+-------+--------+--------+------+------+
|  9888 | 郑十   | 销售   | 3500 | NULL |
|  9880 | 张三   | 销售   | 3000 |  200 |
|  9900 | 孙七   | 销售   | 2500 |  200 |
|  9775 | 王五   | 销售   | 3500 |  500 |
+-------+--------+--------+------+------+
4 rows in set (0.00 sec)

上述SELECT语句查询职位为销售的员工信息,并且根据员工奖金值进行升序排序。从执行结果可以看出,奖金值为NULL的员工信息排在第一位,说明排序时NULL被当作最小值。

ORDER BY可以对多个字段的值进行排序,并且每个排序字段可以有不同的排序顺序。例如,技术人员想要使用SQL语句查询员工表中工资为2500的员工所有记录,查询出的记录先按职位的升序排序,再按员工编号降序排序,具体SQL语b 句及执行结果如下。

mysql> SELECT * FROM emp WHERE sal=2500 ORDER BY job,empno DESC;
+-------+--------+--------+------+------+
| empno | ename  | job    | sal  | bon  |
+-------+--------+--------+------+------+
|  9885 | 李四   | 保洁   | 2500 |  100 |
|  9770 | 吴九   | 保洁   | 2500 | NULL |
|  9900 | 孙七   | 销售   | 2500 |  200 |
+-------+--------+--------+------+------+
3 rows in set (0.00 sec)

在上述SELECT语句中,查询sal字段工资为2500的所有记录,先将这些记录按照job字段的值升序排序,如果job字段的值相同,则按照empno字段的值进行降序排序。如果排序字段的值是字符串类型,则会按字符串中字符的ASCII码值进行排序。

上面的例子job字段后面没有设置排序,因此默认是升序,然后又给empno字段设置了降序,大家不要迷了啊。

mysql> SELECT * FROM emp WHERE sal=2500 ORDER BY bon DESC,empno DESC;
+-------+--------+--------+------+------+
| empno | ename  | job    | sal  | bon  |
+-------+--------+--------+------+------+
|  9900 | 孙七   | 销售   | 2500 |  200 |
|  9885 | 李四   | 保洁   | 2500 |  100 |
|  9770 | 吴九   | 保洁   | 2500 | NULL |
+-------+--------+--------+------+------+
3 rows in set (0.00 sec)

这个是两个字段都设置了排序,并且都是降序。

限量查询

查询数据时,SELECT语句可能会返回很多条记录,而用户需要的记录可能只是其中的一条或几条。中的一条或几条。例如,在员工管理系统中,希望每一页默认展示10条员工信息,并且可以通过下拉框更改每页展示的员工信息数。MySQL中提供了一个关键字LIMIT可以指定查询结果从哪一条记录开始以及一共查询多少条信息。在SELECT语句中使用LIMIT的基本语法格式如下。

SELECT 字段名1,字段名2,..… FROM 数据表名 LIMIT [OFFSET,] 记录数;

在上面的语法格式中,LIMIT后面可以跟2个参数。第一个参数OFFSET为可选值,表示偏移量,如果偏移量为0则从查询结果的第一条记录开始,偏移量为1则从查询结果的第二条记录开始,以此类推。如果不指定OFFSET的值,其默认值为0。第二个参数“记录数”表示返回查询记录的条数。

例如,技术人员想要使用SQL语句查询员工表中工资最高的前3名的员工信息,查询时可以使用LIMIT进行限量,具体SQL语句及执行结果如下。

mysql> SELECT * FROM emp ORDER BY sal DESC LIMIT 3;
+-------+--------+--------+------+------+
| empno | ename  | job    | sal  | bon  |
+-------+--------+--------+------+------+
|  9990 | 周八   | 经理   | 7000 | 1000 |
|  9775 | 王五   | 销售   | 3500 |  500 |
|  9888 | 郑十   | 销售   | 3500 | NULL |
+-------+--------+--------+------+------+
3 rows in set (0.00 sec)

在上述SELECT语句中,首先使用ORDER BY根据字段sal的值对数据表中的记录进行降序排序,接着使用LIMIT指定返回第1~3条记录。

除了指定查询记录数,LIMIT还可以通过指定OFFSET的值指定查询的偏移量,也就是查询时跳过几条记录。

例如,我们要使用SQL语句查询员工表中工资第二名到第五名的员工信息。具体SQL语句及执行结果如下:

mysql> SELECT * FROM emp ORDER BY sal DESC LIMIT 1,4;
+-------+--------+--------+------+------+
| empno | ename  | job    | sal  | bon  |
+-------+--------+--------+------+------+
|  9775 | 王五   | 销售   | 3500 |  500 |
|  9888 | 郑十   | 销售   | 3500 | NULL |
|  9880 | 张三   | 销售   | 3000 |  200 |
|  9770 | 吴九   | 保洁   | 2500 | NULL |
+-------+--------+--------+------+------+
4 rows in set (0.00 sec)

在上述SELECT语句中,先使用ORDER BY根据字段sal的值对数据表中的记录进行降序排序,然后指定返回记录的偏移量为1,查询记录的条数为4.执行结果跳过了排序后的第一条员工信息,返回工资前2~5名的员工信息。

这里和Python的索引有点像,可以联系理解一下,下标就像偏移量,都是从0开始。

下篇文章是MySQL中的内置函数的讲解。点个关注不迷路。

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

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

相关文章

15.一种坍缩式的简单——组合模式详解

当曾经的孩子们慢慢步入社会才知道&#xff0c;那年味渐淡的春节就像是疾驰在人生路上的暂停键。 它允许你在隆隆的鞭炮声中静下心来&#xff0c;瞻前顾后&#xff0c;怅然若失。 也允许你在寂静的街道上屏气凝神&#xff0c;倾听自己胸腔里的那团人声鼎沸。 孩子们会明白的&am…

正则表达式的一些高级用法

不允许出现某个单词&#xff0c;使用?! (?!Pattern).\.matches 表示.matches之前的不能是Pattern非贪婪匹配&#xff0c;在匹配项后加? matches\((.*?)\) 这里在.*后加问号&#xff0c;表示尽可能少的匹配。\w表示字母、数字和下划线防范redos攻击&#xff0c;可使用Cyber-…

汽车研发与制造中英文对照

1、技术开发概念和定义 FPDS&#xff08;Ford Product Development System&#xff09;福特产品开发系统 threetype chassis 三类底盘 inter-citybus 长途客车 PassengerVehicle 乘用车 MPV&#xff08;Multi-PurposeVehicle&#xff09;多用途汽车 SUV&#xff08;Sports Uti…

【Flink精讲】Flink内核源码分析:命令执行入口

官方推荐per-job模式&#xff0c;一个job一个集群&#xff0c;提交时yarn才分配集群资源&#xff1b; 主要的进程&#xff1a;JobManager、TaskManager、Client 提交命令&#xff1a;bin/flink run -t yarn-per-job /opt/module/flink-1.12.0/examples/streaming/SocketWind…

Unity—JSON

每日一句&#xff1a;手简素中&#xff0c;感生活恬淡&#xff0c;心有所期&#xff0c;忙而不茫 目录 服务器 常见的服务器语言 Unity的开发语言 JSON 功能&#xff1a; JSON最简单的格式 JSON工具 支持的数据结构&#xff08;C#对于JSON&#xff09; 字符含义 JSON…

单片机stm32智能鱼缸

随着我国经济的快速发展而给人们带来了富足的生活&#xff0c;也有越来越多的人们开始养鱼&#xff0c;通过养各种鱼类来美化居住环境和缓解压力。但是在鱼类饲养过程中&#xff0c;常常由于鱼类对水质、水位及光照强度有着很高的要求&#xff0c;而人们也由于工作的方面而无法…

强化学习入门(Matlab2021b)-创建环境【3】

目录 1 前言2 根据类模板创建自定义环境2.1 创建类模板2.2 Environment properties(环境特性)2.3 Required Functions(需要的环境方法)2.3.1 Constructor function(构造函数)2.3.2 reset function2.3.3 step function2.4 Optional Functions(可选的环境方法)2.5 Environment Vi…

mysql升级到8后关键字变化导致mybatisplus问题解决方案

问题描述 因为mysql8新增了一些关键字,项目中正好用到了mysql8的关键字,导致查询报错 直接上解决方案 最简答的方案 直接在实体类属性上添加注解 示例 TableField(value "remarks") value的值是数据库字段名 ,两边拼接上"" 所有方案 #建议直接用第一…

2023年12月CCF-GESP编程能力等级认证C++编程四级真题解析

一、单选题(共15题,共30分) 第1题 下面有关函数参数的说法,正确的是( )。 A:函数参数传递时,主函数当中采用值传递方式将参数传递给子函数时,若子函数将参数值改变,主函数当中的参数值不变。 B:函数参数传递时,主函数当中采用值传递方式将参数传递给子函数时,若子…

jvm垃圾收集器-三色标记算法

1.对象已死吗? 在堆里面存放着Java世界中几乎所有的对象实例&#xff0c;垃圾收集器在对堆进行回收前&#xff0c;第一件事情就是要确定这些对象之中哪些还“存活”着&#xff0c;哪些已经“死去”&#xff08;即不可能再被任何途径使用的对象). 引计数法 引用计数算法是一…

【快速搞定Webpack5】基本配置及开发模式介绍(二)

在开始使用webpack之前么&#xff0c;我们需要对Webpack的配置有一定的认识。 一、5大核心概念 1. enty&#xff08;入口&#xff09; 指示webpack从哪个文件开始打包 2. output&#xff08;输出&#xff09; 指示webpack打包完的文件输出到哪里去&#xff0c;如何命名等 …

适配器模式:转换接口,无缝对接不同系统

文章目录 **一、技术背景与应用场景****为什么使用适配器模式&#xff1f;****典型应用场景包括但不限于&#xff1a;** **二、适配器模式定义与结构****三、使用步骤举例****四、优缺点分析****总结** 一、技术背景与应用场景 适配器模式在软件设计中扮演着桥梁角色&#xff…

Linux(五)__系统管理

介绍 通常&#xff0c; Windows 中使用"任务管理器"主要有 3 个目的&#xff1a; 利用"应用程序"和"进程"标签来査看系统中到底运行了哪些程序和进程&#xff1b;利用"性能"和"用户"标签来判断服务器的健康状态&#xff1…

前端构造树算法优化

背景 开发过程中遇到后台返回的平铺数据&#xff0c;需要自己根据数据的parent_id将其构造成一套树结构&#xff0c;首先采用递归的方式对数据进行组装。 但后续使用中发现&#xff0c;如果遇到数据量较大(40000)后&#xff0c;该方法的处理耗时明显过长&#xff0c;且导致页面…

怎样重置ubuntu mysql8密码

密码很难记住&#xff0c;所以如果您忘记了 MySQL root 密码&#xff0c;幸运的是&#xff0c;有一种方法可以更改它。这篇文章是为您而写的&#xff0c;在这篇文章结束时&#xff0c;您将成功更改 MySQL 的密码。 本博客演示了如何在 Ubuntu 上重置使用包管理器安装的 MySQL …

vue项目调用摄像头实现拍照功能

目录 1.功能需求 2.API 3.完整代码 4.效果 5.遇到问题 1.功能需求 需求:下面需求图 本来应该使用小程序做&#xff0c;但是为了以后复用考虑&#xff0c;决定使用vue嵌入小程序中。 所以需求就是 调用手机摄像头 实现拍照打卡功能&#xff08;电脑通用&#xff09; 2.API …

物联网平台构成与边缘计算

物联网平台 物联网平台系统通常由以下组件构成&#xff1a; 物联网设备&#xff1a; 这些是连接到物联网平台的传感器、设备或物品。它们可以是各种物联网设备&#xff0c;如传感器、执行器、智能设备等。 通信协议&#xff1a; 物联网设备使用各种通信协议与物联网平台进行通…

介绍一下scrapy中items.py,middlerwares.py,pipelines.py,settings.py的作用与简单示例。

在Scrapy框架中&#xff0c;items.py、middlewares.py、pipelines.py和settings.py都是用于实现不同功能的重要模块。以下是它们的作用和一些常见示例&#xff1a; items.py items.py 文件定义了你的项目中需要提取的数据的数据结构。每个爬虫项目都可以定义一个或多个Item类…

React 19即将发布,新增4个Hook函数

近日,React 团队发布消息称,不会载发布 v18.3版本了,而是即将重点放在React v19 版本。新版本将退出四个新的 hook——旨在解决 React 中两个常见的痛点:数据获取和表单处理。虽然这些 hook 目前作为实验性 API 在 React 预览版本中可用,但它们预计将成为 React 19 的稳定…

创建谷歌浏览器插件的具体步骤

创建谷歌浏览器&#xff08;Chrome&#xff09;插件需要遵循一系列的步骤。以下是一个基本的指南&#xff0c;用于创建一个简单的Chrome插件&#xff1a; 1. 设置项目文件夹 创建一个新的文件夹&#xff0c;用于存放插件的所有文件。 2. 创建manifest.…