MySQL 连接查询

news2024/12/25 1:24:13

文章目录

  • 一,等值连接
  • 二,表别名
  • 三,多表等值连接
  • 四,自然连接
  • 五,自连接
  • 六,非等值内连接
  • 七,外连接
    • (一)左外连接
    • (二)右外连接
    • (三)笛卡尔积


一,等值连接

等值连接的语法较为简单,语法如下:

select  table1.column1,table2.column2
from  table1, table2
where  table1.column3 = table2.column4

其中 select 子句后可跟连接的表中任意字段,from 子句后跟用来连接的表,而 where 子句后的 table1.column=table2.column 即为连接条件。其含义是,将两表中符合条件的记录横向拼接起来,在此基础上选择结果集中要呈现的字段,也可以在 where 子句中追加过滤条件对记录进行筛选。 接下来举个例子,通过 countrycode 字段相等这个条件把 city 表和 countrylanguage 表连接起来,显示前 10 条记录的所有字段,这样在结果不仅可以看到城市信息还可以看到其对应国家的详细信息。SQL 语句如下:

MariaDB [world]> select * from city,countrylanguage
    -> where city.countrycode = countrylanguage.countrycode limit 10;
+-----+----------------+-------------+----------+------------+-------------+------------+------------+------------+
| ID  | Name           | CountryCode | District | Population | CountryCode | Language   | IsOfficial | Percentage |
+-----+----------------+-------------+----------+------------+-------------+------------+------------+------------+
| 129 | Oranjestad     | ABW         ||      29034 | ABW         | Dutch      | T          |        5.3 |
| 129 | Oranjestad     | ABW         ||      29034 | ABW         | English    | F          |        9.5 |
| 129 | Oranjestad     | ABW         ||      29034 | ABW         | Papiamento | F          |       76.7 |
| 129 | Oranjestad     | ABW         ||      29034 | ABW         | Spanish    | F          |        7.4 |
|   1 | Kabul          | AFG         | Kabol    |    1780000 | AFG         | Balochi    | F          |        0.9 |
|   2 | Qandahar       | AFG         | Qandahar |     237500 | AFG         | Balochi    | F          |        0.9 |
|   3 | Herat          | AFG         | Herat    |     186800 | AFG         | Balochi    | F          |        0.9 |
|   4 | Mazar-e-Sharif | AFG         | Balkh    |     127800 | AFG         | Balochi    | F          |        0.9 |
|   1 | Kabul          | AFG         | Kabol    |    1780000 | AFG         | Dari       | T          |       32.1 |
|   2 | Qandahar       | AFG         | Qandahar |     237500 | AFG         | Dari       | T          |       32.1 |
+-----+----------------+-------------+----------+------------+-------------+------------+------------+------------+
10 rows in set (0.000 sec)

结果解析:可以看到结果集中 countrycode 字段出现了两次,说明默认情况下等值连接并不会去掉重复字段。

在等值连接中,如果查询的字段在结果集中是唯一的,那么可直接写字段名。否则,必须在字段名前加上表名以示区分。

如下例所示,查询城市名称、国家代码以及该城市使用的语言,name、language 字段可以不加表名前缀,countrycode 字段则必须加表名前缀:

MariaDB [world]> select name,city.countrycode,language
    -> from city,countrylanguage
    -> where city.countrycode = countrylanguage.countrycode
    -> limit 10;
+----------------+-------------+------------+
| name           | countrycode | language   |
+----------------+-------------+------------+
| Oranjestad     | ABW         | Dutch      |
| Oranjestad     | ABW         | English    |
| Oranjestad     | ABW         | Papiamento |
| Oranjestad     | ABW         | Spanish    |
| Kabul          | AFG         | Balochi    |
| Qandahar       | AFG         | Balochi    |
| Herat          | AFG         | Balochi    |
| Mazar-e-Sharif | AFG         | Balochi    |
| Kabul          | AFG         | Dari       |
| Qandahar       | AFG         | Dari       |
+----------------+-------------+------------+
10 rows in set (0.000 sec)

结果解析:name 和 language 字段在两个表中是唯一的、无歧义的,所以查询该字段的时候,字段前面没有加表名;而 countrycode 字段在两个表中都存在,所以查询的时候须在字段前面加上表名。 但是为了提高性能、避免字段名的使用产生歧义,在多表连接查询的时候,建议以 表名.字段名 的方式来书写 select 子句。

二,表别名

上面例子实现的功能很简单,但 SQL 语句却很长。主要原因是表名比较长,书写出来的 select 子句和 from 子句也就变长。可使用表别名来解决这个问题。

表别名和字段别名类似,就是给表起另外一个名字。不过两者的不同点在于,字段别名是为了让结果易于理解;而表别名则是为了让 SQL 语句简单化。 表别名直接写在表名后即可,其语法如下:

select  t1.column1,t2.column2
from  table1 t1, table2 t2
where  t1.column3 = t2.column4

在 from 子句中原表名的后面定义别名,在其他子句中就可以使用别名了。 根据语法,修改此前案例,将 city 表别名定为 cicountrylanguage 表别名定为 co,修改后的 SQL 语句如下:

MariaDB [world]> select name,ci.countrycode,language
    -> from city ci,countrylanguage co
    -> where ci.countrycode = co.countrycode
    -> limit 10;
+----------------+-------------+------------+
| name           | countrycode | language   |
+----------------+-------------+------------+
| Oranjestad     | ABW         | Dutch      |
| Oranjestad     | ABW         | English    |
| Oranjestad     | ABW         | Papiamento |
| Oranjestad     | ABW         | Spanish    |
| Kabul          | AFG         | Balochi    |
| Qandahar       | AFG         | Balochi    |
| Herat          | AFG         | Balochi    |
| Mazar-e-Sharif | AFG         | Balochi    |
| Kabul          | AFG         | Dari       |
| Qandahar       | AFG         | Dari       |
+----------------+-------------+------------+
10 rows in set (0.001 sec)

两条 SQL 语句相比,使用表别名后变得更简洁了。

需要说明的是,使用表别名时,表别名的作用范围仅限该条 SQL 语句中,离开这个 SQL 语句后无效。

三,多表等值连接

前面介绍的等值连接由两张表完成,如果连接的表超过两张,需要使用 and 来组合多个等值条件,具体语法如下:

select  t1.column1,t2.column2,t3.column3
from  table1 t1, table2 t2,table3 t3
where  t1.column4 = t2.column5 and t1.column6 = t3. column7

在上例的基础上,除了显示城市名称和该城市的语言外,还需要显示城市所属区域,该怎么查询?我们发现,记录区域的字段信息存放在 country 表中,此时我们需要对三张表做等值连接,只显示连接后的前 10 条记录,实现的 SQL 语句如下:

MariaDB [world]> select ci.name,ci.countrycode,co.language,c.region
    -> from city ci,countrylanguage co,country c
    -> where ci.countrycode=co.countrycode and ci.countrycode=c.code
    -> limit 10;
+----------------+-------------+------------+---------------------------+
| name           | countrycode | language   | region                    |
+----------------+-------------+------------+---------------------------+
| Oranjestad     | ABW         | Dutch      | Caribbean                 |
| Oranjestad     | ABW         | English    | Caribbean                 |
| Oranjestad     | ABW         | Papiamento | Caribbean                 |
| Oranjestad     | ABW         | Spanish    | Caribbean                 |
| Kabul          | AFG         | Balochi    | Southern and Central Asia |
| Qandahar       | AFG         | Balochi    | Southern and Central Asia |
| Herat          | AFG         | Balochi    | Southern and Central Asia |
| Mazar-e-Sharif | AFG         | Balochi    | Southern and Central Asia |
| Kabul          | AFG         | Dari       | Southern and Central Asia |
| Qandahar       | AFG         | Dari       | Southern and Central Asia |
+----------------+-------------+------------+---------------------------+
10 rows in set (0.001 sec)

等值连接的关键是找到表与表之间的桥梁(等值条件),通过桥梁构建一个信息更全面的表,达到多表查询的目的。

四,自然连接

在等值连接中,我们并没有强调用来连接的字段名必须相同,只要字段值相等即可进行连接。在等值连接中,如果用于连接的两个字段,其字段名与数据类型完全相同,比如 city 表中的 countrycode 字段与 countrylanguage 中的 countrycode 字段,这种特殊情况可使用自然连接。换句话说,自然连接是特殊的等值连接,特殊之处在于多个表中用于连接的字段同名且同类型。自然连接使用关键字 natural join,其 SQL 语法如下:

select  t1.column1,t2.column2
from  table1 t1
natural join table2 t2

使用该语法,解析引擎会自动探测两个表中相同的字段并设定等值条件,这样的字段可以不止一个,有多少个这样的字段就会生成多少个等值条件。相比显式等值连接来说语法更为简洁。

利用自然连接修改此前例子,SQL 语句如下:

MariaDB [world]> select ci.name,ci.countrycode,co.language
    -> from city ci
    -> natural join countrylanguage co
    -> limit 10;
+----------------+-------------+------------+
| name           | countrycode | language   |
+----------------+-------------+------------+
| Oranjestad     | ABW         | Dutch      |
| Oranjestad     | ABW         | English    |
| Oranjestad     | ABW         | Papiamento |
| Oranjestad     | ABW         | Spanish    |
| Kabul          | AFG         | Balochi    |
| Qandahar       | AFG         | Balochi    |
| Herat          | AFG         | Balochi    |
| Mazar-e-Sharif | AFG         | Balochi    |
| Kabul          | AFG         | Dari       |
| Qandahar       | AFG         | Dari       |
+----------------+-------------+------------+
10 rows in set (0.000 sec)

可以看到,此 SQL 语句中没有使用 where 字句,也没有出现连接符,但是也达到了等值连接的效果。这是因为,自然连接会自动去查找两个表中是否有相同的字段(字段名相同、字段类型也相同),找到后自动完成等值连接。如果连接的表中,没有相同字段,会返回一个空结果,如下示例:

MariaDB [world]> select ci.name,ci.countrycode,co.code
    -> from city ci natural join country co;
Empty set (0.082 sec)

自然连接还会自动去掉重复列:

MariaDB [world]> select * from city natural join countrylanguage limit 10;
+-------------+-----+----------------+----------+------------+------------+------------+------------+
| CountryCode | ID  | Name           | District | Population | Language   | IsOfficial | Percentage |
+-------------+-----+----------------+----------+------------+------------+------------+------------+
| ABW         | 129 | Oranjestad     ||      29034 | Dutch      | T          |        5.3 |
| ABW         | 129 | Oranjestad     ||      29034 | English    | F          |        9.5 |
| ABW         | 129 | Oranjestad     ||      29034 | Papiamento | F          |       76.7 |
| ABW         | 129 | Oranjestad     ||      29034 | Spanish    | F          |        7.4 |
| AFG         |   1 | Kabul          | Kabol    |    1780000 | Balochi    | F          |        0.9 |
| AFG         |   2 | Qandahar       | Qandahar |     237500 | Balochi    | F          |        0.9 |
| AFG         |   3 | Herat          | Herat    |     186800 | Balochi    | F          |        0.9 |
| AFG         |   4 | Mazar-e-Sharif | Balkh    |     127800 | Balochi    | F          |        0.9 |
| AFG         |   1 | Kabul          | Kabol    |    1780000 | Dari       | T          |       32.1 |
| AFG         |   2 | Qandahar       | Qandahar |     237500 | Dari       | T          |       32.1 |
+-------------+-----+----------------+----------+------------+------------+------------+------------+
10 rows in set (0.000 sec)

可以看到结果集中 countrycode 字段只出现了一次。

自然连接需要 MySQL 判定表中相同的字段,在有多个相同字段时,如果想指定以某个字段进行等值连接,需要使用 join……using…… 语法来指定,其语法如下:

select  t1.column1,t2.column2
from  table1 t1
join table2 t2
using(字段)

注意:该语法中不再使用 natural join 。其中字段是指 table1 和 table2 中相同的列。上述例子使用 using 子句后,执行结果如下:

需要注意:

  • using 里面的字段不能加表名作前缀,该字段此时是一个连接字段,不再属于某张单独的表。
  • 连接的表中必须要拥有相同字段才能使用 using。 除了 join……using…… 子句,还可以使用 join……on…… 子句完成类似的功能,其语法如下:
select  t1.column1,t2.column2
from  table1 t1
join table2 t2
on(t1.字段=t2.字段)

其中 on 子句中的字段名可以不同。

上述例子用 on 语句修改后的 SQL 语句如下:

MariaDB [world]> select * from city ci join countrylanguage co on(ci.countrycode = co.countrycode) limit 10;
+-----+----------------+-------------+----------+------------+-------------+------------+------------+------------+
| ID  | Name           | CountryCode | District | Population | CountryCode | Language   | IsOfficial | Percentage |
+-----+----------------+-------------+----------+------------+-------------+------------+------------+------------+
| 129 | Oranjestad     | ABW         ||      29034 | ABW         | Dutch      | T          |        5.3 |
| 129 | Oranjestad     | ABW         ||      29034 | ABW         | English    | F          |        9.5 |
| 129 | Oranjestad     | ABW         ||      29034 | ABW         | Papiamento | F          |       76.7 |
| 129 | Oranjestad     | ABW         ||      29034 | ABW         | Spanish    | F          |        7.4 |
|   1 | Kabul          | AFG         | Kabol    |    1780000 | AFG         | Balochi    | F          |        0.9 |
|   2 | Qandahar       | AFG         | Qandahar |     237500 | AFG         | Balochi    | F          |        0.9 |
|   3 | Herat          | AFG         | Herat    |     186800 | AFG         | Balochi    | F          |        0.9 |
|   4 | Mazar-e-Sharif | AFG         | Balkh    |     127800 | AFG         | Balochi    | F          |        0.9 |
|   1 | Kabul          | AFG         | Kabol    |    1780000 | AFG         | Dari       | T          |       32.1 |
|   2 | Qandahar       | AFG         | Qandahar |     237500 | AFG         | Dari       | T          |       32.1 |
+-----+----------------+-------------+----------+------------+-------------+------------+------------+------------+
10 rows in set (0.000 sec)

需要注意:

  • 使用 on 子句,不会消除重复列,因为 on 中的等值条件无需列相同;
  • 使用 on 子句,连接的字段名可以不同,相当于是 where **=** 的一种替代品。 现在要完成对城市的名称、行政区名以及城市面积的查询,需要连接 city 表和 country。使用 on 子句完成该查询,仅显示前 10 条记录,其 SQL 语句如下:
MariaDB [world]> select ci.name,ci.district,c.surfacearea
    -> from city ci join country c
    -> on(ci.countrycode = c.code)
    -> limit 10;
+----------------+----------+-------------+
| name           | district | surfacearea |
+----------------+----------+-------------+
| Oranjestad     ||      193.00 |
| Kabul          | Kabol    |   652090.00 |
| Qandahar       | Qandahar |   652090.00 |
| Herat          | Herat    |   652090.00 |
| Mazar-e-Sharif | Balkh    |   652090.00 |
| Luanda         | Luanda   |  1246700.00 |
| Huambo         | Huambo   |  1246700.00 |
| Lobito         | Benguela |  1246700.00 |
| Benguela       | Benguela |  1246700.00 |
| Namibe         | Namibe   |  1246700.00 |
+----------------+----------+-------------+
10 rows in set (0.000 sec)

通过对 using 子句和 on 子句的使用,可以得出以下结论:

  1. 使用 using 子句进行连接时,结果中用于连接的列不会重复出现;而 on 子句的结果中,在不做干预的情况下,用于连接的列会出现两次。
  2. 使用 using 子句时,连接的表必须有相同的字段;而 on 子句可以不相同,使用比较灵活。

五,自连接

自连接,就是一张表与自己进行连接。这种连接有什么意思呢?通过下面的例子进行说明。 现在准备有一张员工信息表(employee),其信息如下表所示:

emp_idemp_namemgr_idemp_salary
1001null8000
100210016000
100310024000

employ 表建立语句如下:

create table employee
(
    emp_id int not null,
    emp_name varchar(10),
    mgr_id int,
    emp_salary int,
    primary key (emp_id)
);

数据插入语句如下:

insert into employee
values
(1001,'章',null,8000),
(1002,'力',1001,6000),
(1003,'潘',1002,4000);

emp_id 为 1001 的员工就是该企业最大的领导,所以其 mgr_id 为 null。查询所有员工的姓名以及上级领导的姓名,实现 SQL 语句如下:

select e1.emp_name,e2.emp_name mgr
from employee e1,employee e2
where e1.mgr_id = e2.emp_id;

输出结果:

MariaDB [world]> create table employee
    -> (
    ->     emp_id int not null,
    ->     emp_name varchar(10),
    ->     mgr_id int,
    ->     emp_salary int,
    ->     primary key (emp_id)
    -> );
Query OK, 0 rows affected (0.007 sec)

MariaDB [world]> insert into employee
    -> values
    -> (1001,'章',null,8000),
    -> (1002,'力',1001,6000),
    -> (1003,'潘',1002,4000);
Query OK, 3 rows affected (0.002 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [world]> select e1.emp_name,e2.emp_name mgr
    -> from employee e1,employee e2
    -> where e1.mgr_id = e2.emp_id;
+----------+------+
| emp_name | mgr  |
+----------+------+
|||
|||
+----------+------+
2 rows in set (0.001 sec)

六,非等值内连接

非等值内连接,就是指连接的条件不是使用 = 计算,而是其他关系运算的结果。

比如,现在小学成绩实行等级制,只给出 A、B、C、D、E 几个等级。但是无论哪个等级都需要对应一个成绩范围。那么在成绩表中,如何查询出等级达到等级A的学生?

在这里建立 2 张表来说明这个问题。

第 1 张,学生成绩表(score),表结构:score(name,score),信息如下表所示:

姓名(name)成绩(score)
小明95
小张85
小李75

score 表建立语句如下:

create table score
(
    name varchar(10) not null,
    score int not null
);

数据插入语句如下:

insert into score
values
('小明',95),
('小张',85),
('小李',75);

第 2 张,成绩等级表(level),表结构:level(level,low,high),信息如下表所示:

等级(level)最低分(low)最高分(high)
A90100
B8089
C7079
D6069
E059

level 表建立语句如下:

create table level
(
    level varchar(1) not null,
    low int not null,
    high int not null
);

数据插入语句如下:

insert into level
values
('A',90,100),
('B',80,89),
('C',70,79),
('D',60,69),
('E',0,59);

现通过非等值内连接,实现对学生姓名及对应等级的查询,其 SQL 语句如下:

select s.name,le.level
from score s,level le
where score between le.low and le.high;

输出结果:

MariaDB [world]> create table score
    -> (
    ->     name varchar(10) not null,
    ->     score int not null
    -> );
Query OK, 0 rows affected (0.006 sec)

MariaDB [world]> insert into score
    -> values
    -> ('小明',95),
    -> ('小张',85),
    -> ('小李',75);
Query OK, 3 rows affected (0.002 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [world]> create table level
    -> (
    ->     level varchar(1) not null,
    ->     low int not null,
    ->     high int not null
    -> );
Query OK, 0 rows affected (0.006 sec)

MariaDB [world]> insert into level
    -> values
    -> ('A',90,100),
    -> ('B',80,89),
    -> ('C',70,79),
    -> ('D',60,69),
    -> ('E',0,59);
Query OK, 5 rows affected (0.002 sec)
Records: 5  Duplicates: 0  Warnings: 0

MariaDB [world]> select s.name,le.level
    -> from score s,level le
    -> where score between le.low and le.high;
+--------+-------+
| name   | level |
+--------+-------+
| 小明   | A     |
| 小张   | B     |
| 小李   | C     |
+--------+-------+
3 rows in set (0.000 sec)

七,外连接

前面提到了内连接,自然也存在外连接。外连接分为左外连接和右外连接(MySQL 中没有全连接)。此外还有一种特殊的连接叫交叉连接,即笛卡尔积。

(一)左外连接

左外连接简称左连接,是指在两个表进行连接时,返回左表的全部记录及右表中符合条件的记录,右表没有匹配的记录用 null 补全。使用左连接的 SQL 语法如下:

select  *
from table1 t1 left join table2 t2
on(t1.column1 = t2.column2)

其中 left join 是 left outer join 的缩写。左连接的结果如下图阴影部分所示。
在这里插入图片描述
举例说明:对 city 表与 country 表进行左连接,查询城市的代码和面积。其 SQL 语句如下:

select ci.countrycode,c.surfacearea
from city ci left join country c on(ci.name = c.name);

输出结果:
在这里插入图片描述
因为左表 city 表里面有 4079 条记录,左连接后的结果也是 4079 条记录。而满足条件的右表信息都正常显示出来,不满足的则使用 null 来补全。

(二)右外连接

右外连接简称右连接,右连接刚好和左连接相反,返回右表的全部记录及左表中符合条件的记录,左表没有匹配的记录用 null 补全。使用右连接的 SQL 语法如下:

select  *
from table1 t1 right join table2 t2
on(t1.column1 = t2.column2);

其中 right join 是 right outer join 的缩写。右连接的结果如下图阴影部分所示。
在这里插入图片描述
举例说明:对 city 表与 country 表进行右连接,查询城市的代码和面积。其 SQL 语句如下:

select ci.countrycode,c.surfacearea
from city ci right join country c
on(ci.name = c.name);

输出结果:
在这里插入图片描述
因为右表 country 表里面只有 239 条记录,右连接后的结果也是 239 条记录。而满足条件的左表信息都正常显示出来,不满足的则使用 null 来补全。

(三)笛卡尔积

笛卡尔积也叫交叉连接,原理就是一张表中的每一条记录都要和另一张表中的所有记录进行连接。如果两张表分别有 n 和 m 条记录,进行笛卡尔积的结果有 n*m 条记录。

笛卡尔积使用 join 来连接,基本语法如下:

select * from table1 join table2;

继续以成绩表和等级表为例,进行笛卡尔积,其 SQL 语句如下:

select * from score join level;

输出结果:

MariaDB [world]> select * from score join level;
+--------+-------+-------+-----+------+
| name   | score | level | low | high |
+--------+-------+-------+-----+------+
| 小明   |    95 | A     |  90 |  100 |
| 小张   |    85 | A     |  90 |  100 |
| 小李   |    75 | A     |  90 |  100 |
| 小明   |    95 | B     |  80 |   89 |
| 小张   |    85 | B     |  80 |   89 |
| 小李   |    75 | B     |  80 |   89 |
| 小明   |    95 | C     |  70 |   79 |
| 小张   |    85 | C     |  70 |   79 |
| 小李   |    75 | C     |  70 |   79 |
| 小明   |    95 | D     |  60 |   69 |
| 小张   |    85 | D     |  60 |   69 |
| 小李   |    75 | D     |  60 |   69 |
| 小明   |    95 | E     |   0 |   59 |
| 小张   |    85 | E     |   0 |   59 |
| 小李   |    75 | E     |   0 |   59 |
+--------+-------+-------+-----+------+
15 rows in set (0.000 sec)

简单来说,笛卡尔积是没有条件的连接,这会导致乘法效应,产生的数据量远远超过需要的数据,且多数配对不符合业务逻辑。应尽量避免连接查询中笛卡尔积的出现。

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

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

相关文章

Cookie与Session的工作流程

文章目录 Cookiecookie的工作流程1.cookie从哪里来2.cookie到哪里去3.cookie是做什么的 SessionSession工作流程 Cookie与Session都是http协议中的机制,都是用来追踪浏览器用户身份的会话方式.但是又有各自的工作流程. Cookie cookie是浏览器在本地存储数据的一种机制。 cookie…

java从入门到起飞——基础概念

目录 背景注释和关键字注释关键字 常量变量数据类型计算存储单元数据类型分类 标识符小驼峰命名法(方法、变量)大驼峰命名法(类) 类型转换自动类型转换强制类型转换 计算机中的数据存储总结 背景 学编程这么长时间了,重…

Java Swing花样玩法:教你用代码制作六一儿童节的精美贺卡(简单版)

✨博主:命运之光 ✨专栏:Java经典程序设计 前言:这篇博客在打开可能会自动播放视频,视频有音乐,请及时静音哈🙂 目录 ✨前言 ✨引言 ✨简单介绍一下Javaswing这项技术简单介绍一下Javaswing这项技术&a…

电子模块|压力传感器模块HX711---硬件介绍与C51STM32驱动

电子模块|压力传感器模块HX711---硬件介绍与C51&&STM32驱动 实物照片模块简介模块特点 硬件模拟输入供电电源时钟选择串口通讯复位和断电HX711相关部分的 PCB 设计 软件驱动C51软件代码STM32软件代码 实物照片 模块简介 HX711是一款专为高精度称重传感器而设计的24位A…

全志V3S嵌入式驱动开发(音频输出和音频录制)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 之前在芯片公司的时候,基本没有看过音频这一块,只知道有个alsa框架这么个知识点。要驱动音频,需要两部分&#…

10-风险管理:如何应对暗礁风险?系统化风险管理让你安心!

项目已到中期,目前看很顺利,但隐隐不安:项目进展越平稳,我越觉不安。我担心项目会不会存在什么风险,而自己却没发现。 这种担心很必要,因为项目从构思起,就存在风险。光担心没用,项…

如何用LoadRunner 做性能测试?一篇文章教会你

目录 一、loadrunner介绍 二、测试计划 三、创建测试脚本 四、创建测试场景 五、分析结果 六、性能指标 一、loadrunner介绍 loadrunner有三个软件,其中Virtual User Generator是用于录制测试脚本的,是一个虚拟用户生成器。Controller用于创建、运…

CSS常用属性

目录 1.CSS是什么? 2.基本语法 3.引入方式 1.内部样式表 2.行内样式表 3.外部样式 4.基础选择器 1.标签选择器 2.类选择器 3.id选择器 4.通配符选择器 基础选择器总结 5.复合选择器 1.后代选择器 2.子选择器 3.并集选择器 4.伪类选择器 1) 链接伪类…

行业风向:国产新能源汽车如何“扬帆起航”闯世界?

历经十余年的积累和发展,受益于国家财政政策的大力支持、行业技术水平的大幅提升、车企研发与营销费用的大力投入等多重因素,我国新能源汽车走向了高速发展阶段,并一举成为全球最大的新能源汽车市场,在续航里程、环境适应性、整车…

Hooks

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

以太网交换机的生成树协议STP

以太网交换机的生成树协议STP 笔记来源: 湖科大教书匠:以太网交换机的生成树协议STP 声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考 如下图所示以太网中出现链路故障导致部分主机间无法进行通信 如何提高以太网的可靠性&am…

Elasticsearch:复制 - replication

在本篇文章中,我们来讲述 Elasrticsearch 集群中重要的一个概念 replication,也即复制。 了解 Elasticsearch 中的分片复制 默认情况下,索引由单个分片组成,但是如果存储分片的节点出现故障(例如磁盘故障)…

【Python基础】- 基础数据类型(下)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

一文吃透Java并发高频面试题

内容摘自我的学习网站:topjavaer.cn 分享50道Java并发高频面试题。 线程池 线程池:一个管理线程的池子。 为什么平时都是使用线程池创建线程,直接new一个线程不好吗? 嗯,手动创建线程有两个缺点 不受控风险频繁创…

typescript 相关概念

TypeScript 开发环境搭建 下载Node.js 14.15.1版本64位:https://nodejs.org/dist/v14.15.1/node-v14.15.1-x64.msi node官网: Node.js 安装Node.js 使用npm全局安装typescript 进入命令行 输入: npm i -g typescript 创建一个ts文件 使用tsc对ts文件…

从0-1一起学习live555设计思想之一 基础运行环境 + 任务调度

系列文章目录 文章目录 系列文章目录前言一、基础组件总览二、UsageEnvironment三、BasicUsageEnvironment0四、BasicUsageEnvironment五、TaskScheduler六、BasicTaskScheduler0七、DelayQueue八、BasicTaskScheduler九、基础调度总结总结前言 一、基础组件总览 本篇开始分析…

【OpenCV • c++】滑动条的创建和使用

🚀 个人简介:CSDN「博客新星」TOP 10 , C/C 领域新星创作者💟 作 者:锡兰_CC ❣️📝 专 栏:【OpenCV • c】计算机视觉🌈 若有帮助,还请关注➕点赞➕收藏&#xff…

【Linux网络服务】Nginx Rewrite重写模块

Nginx Rewrite 一、常用的Nginx 正则表达式二、location 匹配的范围2.1location实验 三、rewrite模块3.1rewrite跳转3.2rewrite执行顺3.3flag标记说明3.4rewrite中常用的全局变量3.5rewrite实验3.5.1 基于域名的跳转3.5.2基于客户端IP访问跳转3.5.3基于旧域名跳转到新域名后面加…

基于深度学习的高精度海洋生物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度海洋生物检测识别系统可用于日常生活中检测与定位海洋生物目标(海胆:echinus,海参:holothurian,扇贝:scallop,海星:starfish)&…

MySQL数据库 番外.聚合函数

前言: 聚合函数是分组查询中一个重要的组成部分,想要利用分组查询,就要对聚合函数有不错的掌握,因此我们在这里开一篇番外,讲解SQL语法中的聚合函数 聚合函数: 聚合函数是SQL中一种特殊的函数,…