MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 6

第06章_多表查询

多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。

这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个 关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进 行关联. 

#熟悉常见的几个表
DESC employees;
DESC departments;
DESC locations;#查询员工名为'Abel'的人在哪个城市工作?
SELECT *
FROM employees
WHERE last_name 'Abel';SELECT *
FROM departments
WHERE department_id=80;SELECT *
FROM locations
WHERE location_id =2500;

从多个表中获取数据:会导致几个表数据相乘,这会导致冗余等等的错误 : (会造成数据的冗余,查询信息的时间会变长,占用资源,与磁盘IO的次数多性能会变差,维护的成本也高.我们把上述多表查询中出现的问题称为:笛卡尔积的错误。

多表查询讲解

对于如下数据:

##2.多表的查询如何实现?
#错误的实现方式:
SELECT employee_id,department_name
FROM employees,departments;  #查询出2889条记录SELECT *
FROM employees; #107条记录SELECT 2889/ 107
FROM DUAL;SELECT
FROM departments; #27条记录
#错误的实现方式:每个员工和每个部门匹配了一遍#错误原因: 缺少了多表的连续条件

笛卡尔积(或交叉连接)的理解 :笛卡尔乘积是一个数学运算。假设我有两个集合 X 和 Y,那么 X 和 Y 的笛卡尔积就是 X 和 Y 的所有可能 组合,也就是第一个对象来自于 X,第二个对象来自于 Y 的所有可能。组合的个数即为两个集合中元素 个数的乘积数。

#3.多表查询的正确方式:需要有连接条件SELECT employee_id,department_name
FROM employees,departments
#两个表的连接条件
WHERE employees.`department_id` =departments.department_id;

笛卡尔积的错误会在下面条件下产生:

  • 省略多个表的连接条件(或关联条件)
  • 连接条件(或关联条件)无效
  • 所有表中的所有行互相连接

为了避免笛卡尔积, 可以在 WHERE 加入有效的连接条件。

加入连接条件后,查询语法:

SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;  #连接条件

在 WHERE子句中写入连接条件。

正确写法:

#案例:查询员工的姓名及其部门名称 SELECT last_name, department_name FROM employees, departments WHERE employees.department_id = departments.department_id;

在表中有相同列时,在列名之前加上表名前缀。

#4,如果查询语句中出现了多个表中都存在的字段,则必须指明此字段所在的表。
SELECT employees.employee_id,departments.department_name,employees.department_id
FROM employees,departments
WHERE employees.`department_id`=departments.department_id;
#建议:从sql优化的角度,建议多表查询时,每个字段前都指明其所在的表。
5.可以给表起别名,在SELECT和WHERE中使用表的别名。
SELECT emp.employee_id,dept.department_name,emp.department_id
FROMemployees emp,departments dept
WHERE emp.`department_id`=dept.department_id;#如果给表起了别名,一旦在SELECT或WHERE中使用表名的话,则必须使用表的别名,而不能再使用表的原名。
#如下的操作是错误的
SELECT emp.employee_id,departments.department_name,emp.department_id
FROM employees emp,departments dept
WHERE emp.`department_id`=dept.department_id;

看执行顺序 先执行from 在from中起别名 where可以用别名,这是给表起别名,又不是给字段起别名,FROM是最开始就会执行的关键字,所以后面执行的都可以用到

#必须在不同表之间找一个介绍人,即有一个关联的元素
#6.结论:如果有n个表实现多表的查询,则需要至少n-1个连接条件
#练习:查询员工的employee_id,last_name,department_name,citySELECT e.employee_id,e.last_name,d.department_name,l.city,e.department_id,l.location_id
FROM employees e,departments d,locations1
WHERE e.`department_id`=d.`department_id`
AND d.`location_id`=l.`location_id`;

演绎式:提出问题1---->解决问题1--------->提出问题2----->解决问题2
归纳式:总--分

#7.多表查询的分类
角度1:等值连接VS非等值连接
角度2:自连接VS非自连接
角度3:内连接VS外连接

等值连接VS非等值连接

SELECT *
FROM job_grades;SELECT e.last_name,e.salary,j.grade_level
FROM employees e,job_grades j
#where e.`salary` between j.`lowest_saland` and j.`highest_sal`
WHERE e.`salary` >= j.`lowest_sal` AND e.`salary`<=j.`highest sal`;

自连接VS非自连接

自我引用

#7.2自连接VS非自连接
SELECT * FROM employees;#自连接的例子:
#练习:查询员工id,员工姓名及其管理者的id和姓名SELECT emp.employee_id,emp.last_name,mgr.employee_id,mgr.last_name
FROM employees emp,employees mgr
WHERE emp.`manager_id`=mgr.`employee_id`;

讲员工表里的管理员当做一个表。只有当员工表里的管理员和管理表里的员工相等就可以了。管理表里的员工其实就是存放的管理员,不懂相等的,因为管理者也是公司的员工,就会有employee_id和manager_id,非管理者的manger_id也就是管理者的employee_id,所以用这个关联起来

内连接VS外连接

交集 并集 内外连接  内连接就相当于两个表的交集,外连接就相当于两个表的并集

#7.3内连接Vs外连接#内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行
SELECT employee_id,department_name
FROM employees e,departments d
WHERE e.department_id=d.department_id;#只有106条记录#外连接:合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行之外,
#还查询到了左表或右表中不匹配的行。
#外连接的分类:左外连接、右外连接、满外连接
  • 内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行
  • 外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的 行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL)。
  • 如果是左外连接,则连接条件中左边的表也称为 主表,右边的表称为 从表。
  • 如果是右外连接,则连接条件中右边的表也称为 主表,左边的表称为 从表。

 附录:常用的 SQL 标准有哪些

在正式开始讲连接表的种类时,我们首先需要知道 SQL 存在不同版本的标准规范,因为不同规范下的表 连接操作是有区别的。

SQL 有两个主要的标准,分别是 SQL92 和 SQL99 。92 和 99 代表了标准提出的时间,SQL92 就是 92 年 提出的标准规范。当然除了 SQL92 和 SQL99 以外,还存在 SQL-86、SQL-89、SQL:2003、SQL:2008、 SQL:2011 和 SQL:2016 等其他的标准。

这么多标准,到底该学习哪个呢?实际上最重要的 SQL 标准就是 SQL92 和 SQL99。一般来说 SQL92 的 形式更简单,但是写的 SQL 语句会比较长,可读性较差。而 SQL99 相比于 SQL92 来说,语法更加复杂, 但可读性更强。我们从这两个标准发布的页数也能看出,SQL92 的标准有 500 页,而 SQL99 标准超过了 1000 页。实际上从 SQL99 之后,很少有人能掌握所有内容,因为确实太多了。就好比我们使用 Windows、Linux 和 Office 的时候,很少有人能掌握全部内容一样。我们只需要掌握一些核心的功能,满 足日常工作的需求即可。

SQL92 和 SQL99 是经典的 SQL 标准,也分别叫做 SQL-2 和 SQL-3 标准。也正是在这两个标准发布之 后,SQL 影响力越来越大,甚至超越了数据库领域。现如今 SQL 已经不仅仅是数据库领域的主流语言, 还是信息领域中信息处理的主流语言。在图形检索、图像检索以及语音检索中都能看到 SQL 语言的使用

#练习:查询所有的员工的last_name,department_name信息SELECT employee_id,department_name
FROM employees e,departments d
WHERE e.`department_id`=d.department_id;#需要使用左外连接#SQL92语法实现内连接:见上,略
#SQL92语法实现外连接:使用+   ----------MySQL不支持SQL92语法中外连接的写法!
#+好像把两条不等的腿加长一段SELECT employee_id,department_name
FROM employees e,departments d
WHERE e.`department_id`=d.department_id(+);#SQL99语法中使用JOIN ...ON的方式实现多表的查询。这种方式也能解决外连接的问题。MySQL是支持此种方式的
#SQL99语法如何实现多表的查询。#SQL99语法实现内连接:
SELECT last_name,department_name
FROM employees e INNER JOIN departments d
ON e.`department_id`=d.`department_id`;SELECT last_name,department_name,city
FROM employeese JOIN departmentsd
ON e.`department_id`=d.`department_id`
JOIN locations L
ON d.`location_id`=l.`location_id`;#SQL99语法实现外连接:
#左外连接:
#练习:查询所有的员工的last_name,department_name信息
SELECT last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id`=d.`department_id`;#右外连接:
SELECT last_name,department_name
FROM employees e RIGHT OUTER JOIN departments d
ON e.`department_id`=d.`department_id`;满外连接:mySql不支持FULL OUTER JOIN

内连接其实是INNER JOIN,平时是把INNER省略了.

#这是oracle
FROM employees e,departments d
WHERE e.department_id = d.department_id(+);SELECT  employee_id,department_name
FROM employees e,departments d
WHERE e.department_id(+)=d.department_id;#满外连接(FULL OUTER JOIN)
SELECT last_name,department_name
FROM employees e full OUTER JOIN departments d
ON e.department_id =d.department_id;

 使用SQL99实现7中JOIN操作

 UNION的使用

合并查询结果 利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并 时,两个表对应的列数和数据类型必须相同,并且相互对应。各个SELECT语句之间使用UNION或UNION ALL关键字分隔。

语法格式:

SELECT column,... FROM table1
UNION [ALL]
SELECT column,... FROM table2

UNION操作符

UNION 操作符返回两个查询的结果集的并集,去除重复记录。左+中+右

UNION ALL操作符

UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。左+中+中+右

注意:执行UNION ALL语句时所需要的资源比UNION语句少。如果明确知道合并数据后的结果数据 不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效率。

举例:查询部门编号>90或邮箱包含a的员工信息

#方式1 SELECT * FROM employees WHERE email LIKE '%a%' OR department_id>90;

#方式2 SELECT * FROM employees  WHERE email LIKE '%a%'
UNION
SELECT * FROM employees  WHERE department_id>90;

举例:查询中国用户中男性的信息以及美国用户中年男性的用户信息

SELECT id,cname FROM t_chinamale WHERE csex='男'
UNION ALL
SELECT id,tname FROM t_usmale WHERE tGender='male';

#8. UNION  和 UNION ALL的使用
# UNION:会执行去重操作
# UNION ALL:不会执行去重操作
#结论:如果明确知道合并数据后的结果数据不存在重复数据,或者不需要去除重复的数据,
#则尽量使用UNION ALL语句,以提高数据查询的效率。

#9. 7种JOIN的实现:# 中图:内连接
SELECT employee_id,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`;# 左上图:左外连接
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`;# 右上图:右外连接
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;# 左中图:
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL;# 右中图:
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL;
#因为是左连接,是保留表adepartment_id为null的数据,所以如果你写的是表a的
department_id为null的值的话,会把表a左表不重复部分过滤掉了。而不是过滤重复部分。# 左下图:满外连接
# 方式1:左上图 UNION ALL 右中图SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
UNION ALL
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL;# 方式2:左中图 UNION ALL 右上图SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;# 右下图:左中图  UNION ALL 右中图
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL;

如果使用主表关联字段 IS NULL,会将主表关联字段非NULL但是和从表没有关联的数据给过滤的

用田字更好理解,因为发不了图片我用象限说明,大家在纸上花花,对比着左接显示出的数据部分会明白的。“无匹配数据则填充为NULL”这个理解了就OK!引申,既然是用null来筛选对应的数据,则不用非得是DAPARTMENT_ID IS NULL,只要是字段被填充为NULL的字段都可以,比如用EMPLOYEE_ID IS NULL也正确

多表查询-2

储备:建表操作:
CREATE TABLE `t_dept` (`id` INT(11) NOT NULL AUTO_INCREMENT,`deptName` VARCHAR(30) DEFAULT NULL,`address` VARCHAR(40) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `t_emp` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(20) DEFAULT NULL,`age` INT(3) DEFAULT NULL,`deptId` INT(11) DEFAULT NULL,empno int  not null,PRIMARY KEY (`id`),KEY `idx_dept_id` (`deptId`)#CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`)) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO t_dept(deptName,address) VALUES('华山','华山');INSERT INTO t_dept(deptName,address) VALUES('丐帮','洛阳');INSERT INTO t_dept(deptName,address) VALUES('峨眉','峨眉山');INSERT INTO t_dept(deptName,address) VALUES('武当','武当山');INSERT INTO t_dept(deptName,address) VALUES('明教','光明顶');INSERT INTO t_dept(deptName,address) VALUES('少林','少林寺');INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('风清扬',90,1,100001);INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('岳不群',50,1,100002);INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('令狐冲',24,1,100003);INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('洪七公',70,2,100004);INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('乔峰',35,2,100005);INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('灭绝师太',70,3,100006);INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('周芷若',20,3,100007);INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('张三丰',100,4,100008);INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('张无忌',25,5,100009);INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('韦小宝',18,null,100010);【题目】
#1.所有有门派的人员信息 
( A、B两表共有)
#2.列出所有用户,并显示其机构信息 
(A的全集)
#3.列出所有门派 
(B的全集)
#4.所有不入门派的人员 
(A的独有)
#5.所有没人入的门派 
(B的独有)
#6.列出所有人员和机构的对照关系
(AB全有)#MySQL Full Join的实现 因为MySQL不支持FULL JOIN,下面是替代方法 
#left join + union(可去除重复数据)+ right join#7.列出所有没入派的人员和没人入的门派
(A的独有+B的独有)
1. 所有有门派的人员信息 
( A、B两表共有)
select * 
from t_emp a inner join t_dept b 
on a.deptId = b.id; 2. 列出所有用户,并显示其机构信息 
(A的全集)
select * 
from t_emp a left join t_dept b 
on a.deptId = b.id; 3. 列出所有门派 
(B的全集)
select * 
from  t_dept  b;4. 所有不入门派的人员 
(A的独有)
select * 
from t_emp a left join t_dept b 
on a.deptId = b.id 
where b.id is null; 5. 所有没人入的门派 
(B的独有)
select * 
from t_dept b left join  t_emp a 
on a.deptId = b.id 
where a.deptId is null; 6. 列出所有人员和机构的对照关系 
(AB全有)#MySQL Full Join的实现 因为MySQL不支持FULL JOIN,下面是替代方法
#left join + union(可去除重复数据)+ right joinSELECT * 
FROM t_emp A LEFT JOIN t_dept B 
ON A.deptId = B.idUNIONSELECT * 
FROM t_emp A RIGHT JOIN t_dept B 
ON A.deptId = B.id7. 列出所有没入派的人员和没人入的门派 
(A的独有+B的独有)
SELECT * 
FROM t_emp A LEFT JOIN t_dept B 
ON A.deptId = B.id 
WHERE B.`id` IS NULLUNIONSELECT * 
FROM t_emp A RIGHT JOIN t_dept B 
ON A.deptId = B.id 
WHERE A.`deptId` IS NULL;

NATURAL JOIN和USING的使用 

#10. SQL99语法的新特性1:自然连接
SQL99 在 SQL92 的基础上提供了一些特殊语法,比如 NATURAL JOIN 用来表示自然连接。我们可以
把自然连接理解为 SQL92 中的等值连接。它会帮你自动查询两张连接表中所有相同的字段,然后进行
等值连接。
#92如下
SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`
AND e.`manager_id` = d.`manager_id`;#99如下
# NATURAL JOIN : 它会帮你自动查询两张连接表中`所有相同的字段`,然后进行`等值连接`。
SELECT employee_id,last_name,department_name
FROM employees e NATURAL JOIN departments d;#11. SQL99语法的新特性2:USING
SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;
你能看出与自然连接 NATURAL JOIN 不同的是,USING 指定了具体的相同的字段名称,你需要在
USING的括号 () 中填入要指定的同名字段。同时使用 JOIN...USING 可以简化 JOIN ON 的等值
连接。它与下面的 SQL 查询结果是相同的:
SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
USING (department_id);#拓展:
SELECT last_name,job_title,department_name 
FROM employees INNER JOIN departments INNER JOIN jobs 
ON employees.department_id = departments.department_id 
AND employees.job_id = jobs.job_id;

注意:

我们要 控制连接表的数量。多表连接就相当于嵌套 for 循环一样,非常消耗资源,会让 SQL 查询性能下 降得很严重,因此不要连接不必要的表。在许多 DBMS 中,也都会有最大连接表的限制。

【强制】超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关联查询时, 保证被关联的字段需要有索引。 说明:即使双表 join 也要注意表索引、SQL 性能。
来源:阿里巴巴《Java开发手册》

课后练习

【题目】

# 1.显示所有员工的姓名,部门号和部门名称。
# 2.查询90号部门员工的job_id和90号部门的location_id
# 3.选择所有有奖金的员工的 last_name , department_name , location_id , city
# 4.选择city在Toronto工作的员工的 last_name , job_id , department_id , department_name
# 5.查询员工所在的部门名称、部门地址、姓名、工作、工资,其中员工所在部门的部门名称为’Executive’
# 6.选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号,结果类似于下面的格式 employees Emp#  manager Mgr#
kochhar      101        king
# 7.查询哪些部门没有员工 100
# 8. 查询哪个城市没有部门
# 9. 查询部门名为 Sales 或 IT 的员工信息 

-- 1. 显示所有员工的姓名,部门号和部门名称SELECT last_name, e.department_id, department_nameFROM employees eLEFT OUTER JOIN departments dON e.`department_id` = d.`department_id`;-- 2. 查询90号部门员工的job_id和90号部门的location_idSELECT job_id, location_idFROM employees e, departments dWHERE e.`department_id` = d.`department_id`AND e.`department_id` = 90;或SELECT job_id, location_idFROM employees eJOIN departments dON e.`department_id` = d.`department_id`WHERE e.`department_id` = 90;-- 3. 选择所有有奖金的员工的 last_name , department_name , location_id , citySELECT last_name , department_name , d.location_id , cityFROM employees eLEFT OUTER JOIN departments dON e.`department_id` = d.`department_id`LEFT OUTER JOIN locations lON d.`location_id` = l.`location_id`WHERE commission_pct IS NOT NULL;-- 4. 选择city在Toronto工作的员工的 last_name , job_id , department_id , department_nameSELECT last_name , job_id , e.department_id , department_nameFROM employees e, departments d, locations lWHERE e.`department_id` = d.`department_id`AND d.`location_id` = l.`location_id`AND city = 'Toronto';
或SELECT last_name , job_id , e.department_id , department_nameFROM employees eJOIN departments dON e.`department_id` = d.`department_id`JOIN locations lON l.`location_id` = d.`location_id`WHERE l.`city` = 'Toronto';-- 5. 查询员工所在的部门名称、部门地址、姓名、工作、工资,其中员工所在部门的部门名称为'Executive'SELECT department_name, street_address, last_name, job_id, salaryFROM employees e JOIN departments dON e.department_id = d.department_idJOIN locations lON d.`location_id` = l.`location_id`WHERE department_name = 'Executive'-- 6. 选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号SELECT emp.last_name employees, emp.employee_id "Emp#", mgr.last_name manager,mgr.employee_id "Mgr#"FROM employees emp LEFT OUTER JOIN employees mgrON emp.manager_id = mgr.employee_id;-- 7. 查询哪些部门没有员工
#方式1:SELECT d.department_idFROM departments d LEFT JOIN employees eON e.department_id = d.`department_id`WHERE e.department_id IS NULL#方式2:SELECT department_idFROM departments dWHERE NOT EXISTS (SELECT *FROM employees eWHERE e.`department_id` = d.`department_id`)-- 8. 查询哪个城市没有部门SELECT l.location_id,l.cityFROM locations l LEFT JOIN departments dON l.`location_id` = d.`location_id`WHERE d.`location_id` IS NULL-- 9. 查询部门名为 Sales 或 IT 的员工信息SELECT employee_id,last_name,department_nameFROM employees e,departments dWHERE e.department_id = d.`department_id`AND d.`department_name` IN ('Sales','IT');

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

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

相关文章

FANUC机器人系统镜像备份与恢复的具体步骤(图文)

FANUC机器人系统镜像备份与恢复的具体步骤(图文) 镜像备份: 如下图所示,进入文件—工具—切换设备,找到插入的U盘UT1, 如下图所示,进入U盘目录后,创建目录,这里目录名称为11, 如下图所示࿰

根除埃博拉病毒(2015MCM美赛A)

题目 要求&#xff1a; 现实、合理、可用要求考虑到&#xff1a; a. 疾病传播 b.药物数量 c. 传送系统 d.传送位置 e. 药物或者疫苗的生产速度一个非技术性文件 论文 参考论文 概述 两个模型&#xff0c;stochastic和deterministic。 分析思路&#xff1a;基于现实的数据建立…

多线程之旅:开启多线程安全之门的钥匙

上次&#xff0c;小编分享到了多线程出现了安全问题。 那么接下来小编来分享下是如何解决这个多线程安全问题的。 上次分享到&#xff0c;多线程安全问题的“罪魁祸首”&#xff1a;线程调度的不确定性。 就是说呢&#xff0c;A、B、C三个线程&#xff0c;然后&#xff0c;A…

Docker 单机快速部署大数据各组件

文章目录 一、Spark1.1 NetWork 网络1.2 安装 Java81.3 安装 Python 环境1.4 Spark 安装部署 二、Kafka三、StarRocks四、Redis五、Rabbitmq六、Emqx6.1 前言6.2 安装部署 七、Flink八、Nacos九、Nginx 一、Spark 1.1 NetWork 网络 docker network lsdocker network create -…

设计模式的艺术-职责链模式

行为型模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解职责链模式 最常见的职责链是直线型&#xff0c;即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者&#xff0c;职责链模式可以将请求的处理者组织成一条链&#xff0c;并让请求沿着…

CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅

CSDN 博客之星 2024&#xff1a;默语的技术进阶与社区耕耘之旅 &#x1f31f; 默语&#xff0c;是一位在技术分享与社区建设中坚持深耕的博客作者。今年&#xff0c;我有幸再次入围成为 CSDN 博客之星TOP300 的一员&#xff0c;这既是对过往努力的肯定&#xff0c;也是对未来探…

Mysql的数据类型(学习自用)

一、整数型数据类型 名称大小&#xff08;字节数&#xff09;范围(无符号&#xff09;范围&#xff08;有符号&#xff09;TINYINT10-255-2^8~2^8-1SMALLINT20-65535-2^16~2^16-1MEDIUMINT30-2^24-1-2^24~2^24-1INT40-2^32-1-2^32~2^32-1BIGINT80-2^64-1-2^64~2^64-1 二、浮点…

深入 Flutter 和 Compose 的 PlatformView 实现对比,它们是如何接入平台控件

在上一篇《深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比》发布之后&#xff0c;收到了大佬的“催稿”&#xff0c;想了解下 Flutter 和 Compose 在 PlatformView 实现上的对比&#xff0c;恰好过去写过不少 Flutter 上对于 PlatformView 的实现&#xff0c;这次恰好…

winfrom项目,引用EPPlus.dll实现将DataTable 中的数据保存到Excel文件

最近研究不安装office也可以保存Excel文件&#xff0c;在网上查询资料找到这个方法。 第一步&#xff1a;下载EPPlus.dll文件&#xff08;自行去网上搜索下载&#xff09; 第二步&#xff1a;引用到需要用的项目中&#xff0c;如图所示&#xff1a; 第三步&#xff1a;写代码…

暑期实习准备:C语言

1.局部变量和全局变量 局部变量的作用域是在变量所在的局部范围&#xff0c;全局变量的作用域是整个工程&#xff1b;局部变量的生命周期是作用域内&#xff0c;全局变量的生命周期是整个程序的生命周期&#xff0c;当两者命名冲突时&#xff0c;优先使用的是局部变量。 2.C语言…

OGG 19C 集成模式启用DDL复制

接Oracle19C PDB 环境下 OGG 搭建&#xff08;PDB to PDB&#xff09;_cdb架构 配置ogg-CSDN博客&#xff0c;给 pdb 环境 ogg 配置 DDL 功能。 一个报错 SYShfdb1> ddl_setup.sqlOracle GoldenGate DDL Replication setup scriptVerifying that current user has privile…

【动态规划】落花人独立,微雨燕双飞 - 8. 01背包问题

本篇博客给大家带来的是01背包问题之动态规划解法技巧. &#x1f40e;文章专栏: 动态规划 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺便…

FluentCMS:基于 ASP.NET Core 和 Blazor 技术构建的开源CMS内容管理系统

推荐一个基于 ASP.NET Core 和 Blazor 技术构建的、功能完善的开源CMS内容管理系统。 01 项目简介 FluentCMS 是一个基于强大的 ASP.NET Core 和创新的 Blazor 技术构建的现代内容管理系统&#xff08;CMS&#xff09;。 FluentCMS 设计为快速、灵活且用户友好&#xff0c;它…

[创业之路-262]:《向流程设计要效率》-2-职能型组织、项目型组织、流程型组织的异同比较

目录 一、职能型组织与流程化组织的比较 1.1、定义与结构 1.2、关注焦点与运作方式 1.3、优势与局限性 1.4、转型与发展 二、职能型组织、项目型组织、流程型组织的比较 2.1、定义与特点 2.2、优势与局限性 2.3、适用场景与选择建议 三、项目型组织、流程型组织的异同…

5G网络下移动机器人的图像和指令传输用于远程操作

论文标题 **英文标题&#xff1a;**Image and Command Transmission Over the 5G Network for Teleoperation of Mobile Robots **中文标题&#xff1a;**5G网络下移动机器人的图像和指令传输用于远程操作 作者信息 Thiago B. Levin,, Joo Miguel Oliveira,, Ricardo B. Sou…

云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?

引言 在近日举办的一场「云和恩墨大讲堂」直播栏目中&#xff0c;云和恩墨联合创始人李轶楠、副总经理熊军和欧冶云商数据库首席薛晓刚共同探讨了DBA的现状与未来发展。三位专家从云计算、人工智能、国产化替代等多个角度进行了深入的分析和探讨&#xff0c;为从业者提供了宝贵…

30天开发操作系统 第 17 天 -- 命令行窗口

前言 今天一开始&#xff0c;请大家先回忆一下任务A的情形。在harib13e中&#xff0c;任务A下面的LEVEL中有任务因此FIFO为空时我们可以让任务A进入休眠状态。那么&#xff0c;如果我们并未启动任务B0~ B0~ B2, B2的话&#xff0c;任务A又将会如何呢&#xff1f; 首先&#xf…

R语言学习笔记之开发环境配置

一、概要 整个安装过程及遇到的问题记录 操作步骤备注&#xff08;包含遇到的问题&#xff09;1下载安装R语言2下载安装RStudio3离线安装pacman提示需要安装Rtools4安装Rtoolspacman、tidyfst均离线安装完成5加载tidyfst报错 提示需要安装依赖&#xff0c;试错逐步下载并安装…

数据结构 链表2

目录 前言&#xff1a; 一&#xff0c;反转一个链表(迭代) 二&#xff0c;打印一个链表&#xff08;递归&#xff09; 三&#xff0c;反转一个链表(递归) 四&#xff0c;双向链表 总结 前言&#xff1a; 我们根据 [文章 链表1] 可以知道链表相比较于数组的优缺点和计算机…

考研408笔记之数据结构(五)——图

数据结构&#xff08;五&#xff09;——图 1. 图的基本概念 1.1 图的定义 1.2 有向图和无向图 在有向图中&#xff0c;使用圆括号表示一条边&#xff0c;圆括号里元素位置互换没有影响。 在无向图中&#xff0c;使用尖括号表示一条边&#xff0c;尖括号里元素位置互换则表示…