【MySQL联合查询】轻松实现数据关联
1、联合查询
联合查询又称为多表查询,它的基本执行过程就是笛卡尔积
1.1 认识笛卡尔积
那么什么是笛卡尔积呢?
答:笛卡尔积就是将两张表放在一起进行计算,把第一张表的每一行分别取出来和第二张表的每一行进行连接,得到一个新的行。
举例说明笛卡尔积:
假设我们现在有两张表分别为学生信息表和班级信息表

现在我们把这两张表进行笛卡尔积操作:

笛卡尔积相当于乘法运算,列数是两个表列数之和,行数是两个表行数之积
注:笛卡尔积执行后产生的结果大多是无效的,此时我们就可以采用条件进行筛选
1.2 笛卡尔积进行多表查询
接下来我们就来试一下如何进行笛卡尔积操作:
首先创建两张表,分别为上述的学生信息表和班级信息表,创建完两张表后并给它们添加上述表中的内容
select * from student;
+----+------+---------+
| id | name | classid |
+----+------+---------+
| 1 | 张三 | 1 |
| 2 | 李四 | 2 |
| 3 | 王五 | 1 |
+----+------+---------+
select * from class;
+---------+-----------+
| classid | classname |
+---------+-----------+
| 1 | 舞蹈班 |
| 2 | 跆拳道班 |
+---------+-----------+
然后对这两张表进行笛卡尔积操作
select * from student,class;
+----+------+---------+---------+-----------+
| id | name | classid | classid | classname |
+----+------+---------+---------+-----------+
| 1 | 张三 | 1 | 1 | 舞蹈班 |
| 1 | 张三 | 1 | 2 | 跆拳道班 |
| 2 | 李四 | 2 | 1 | 舞蹈班 |
| 2 | 李四 | 2 | 2 | 跆拳道班 |
| 3 | 王五 | 1 | 1 | 舞蹈班 |
| 3 | 王五 | 1 | 2 | 跆拳道班 |
+----+------+---------+---------+-----------+
上述的笛卡尔积执行后产生的结果大多数是无效的,此时我们就可以采用条件进行筛选
当 student 表中的 classid 和 class 表中的 classid 相等时,则这条数据是有效的数据
select * from student,class where classid = classid;
ERROR 1052 (23000): Column 'classid' in where clause is ambiguous
如果直接用 classid = classid 则会报错,因为它无法分辨哪个classid 和 哪个 classid 进行比较
select * from student,class where student.classid = class.classid;
+----+------+---------+---------+-----------+
| id | name | classid | classid | classname |
+----+------+---------+---------+-----------+
| 1 | 张三 | 1 | 1 | 舞蹈班 |
| 2 | 李四 | 2 | 2 | 跆拳道班 |
| 3 | 王五 | 1 | 1 | 舞蹈班 |
+----+------+---------+---------+-----------+
那么此时就可以采用 表名.列名 的方式进行区分
注:多表查询除了可以加上连接条件外,还可以加上其他条件
多表查询出来用 from 多个表加逗号分隔 来连接多个表外,还可以用 join on 来连接,还可以是 inner join on
join on 实现多表查询:
select * from student join class on student.classid = class.classid;
+----+------+---------+---------+-----------+
| id | name | classid | classid | classname |
+----+------+---------+---------+-----------+
| 1 | 张三 | 1 | 1 | 舞蹈班 |
| 2 | 李四 | 2 | 2 | 跆拳道班 |
| 3 | 王五 | 1 | 1 | 舞蹈班 |
+----+------+---------+---------+-----------+
join 连接的是两个表,on 后面跟的是连接条件
inner join on 实现多表查询:
select * from student inner join class on student.classid = class.classid;
+----+------+---------+---------+-----------+
| id | name | classid | classid | classname |
+----+------+---------+---------+-----------+
| 1 | 张三 | 1 | 1 | 舞蹈班 |
| 2 | 李四 | 2 | 2 | 跆拳道班 |
| 3 | 王五 | 1 | 1 | 舞蹈班 |
+----+------+---------+---------+-----------+
inner join on 其实跟 join on 一样,此处不做过多解释
from 多个表 和 join on 的主要区别:
from 多个表只能实现内连接
join on 既可以实现内连接也可以实现外连接
1.3 内连接和外连接
内连接 和 外连接的主要区别:
当连接的两个表里面的数据是一一对应的时候,内连接和外连接其实就没啥区别
当连接的两个表里面的数据不是一一对应的时候,内连接和外连接就有区别了
1.3.1 两张表一一对应
现在有两张表,分别为 student 学生表 和 score 成绩表:
select * from student;
+----+------+
| id | name |
+----+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
+----+------+
select * from scoretable;
+-----------+-------+
| studentId | score |
+-----------+-------+
| 1 | 97 |
| 2 | 86 |
| 3 | 73 |
+-----------+-------+
id 和 studentId 是一一对应的,所有内连接和外连接没什么区别
内连接:
select * from student,scoreTable where student.id = scoretable.studentId;
+----+------+-----------+-------+
| id | name | studentId | score |
+----+------+-----------+-------+
| 1 | 张三 | 1 | 97 |
| 2 | 李四 | 2 | 86 |
| 3 | 王五 | 3 | 73 |
+----+------+-----------+-------+
外连接:
select * from student join scoreTable on student.id = scoretable.studentId;
+----+------+-----------+-------+
| id | name | studentId | score |
+----+------+-----------+-------+
| 1 | 张三 | 1 | 97 |
| 2 | 李四 | 2 | 86 |
| 3 | 王五 | 3 | 73 |
+----+------+-----------+-------+
1.3.2 两张表不一一对应
现在有两张表,分别为 student 学生表 和 score 成绩表:
select * from student;
+----+------+
| id | name |
+----+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
+----+------+
select * from scoretable;
+-----------+-------+
| studentId | score |
+-----------+-------+
| 1 | 97 |
| 2 | 86 |
| 6 | 73 |
+-----------+-------+
现在我们可以看到 student 中的 id 为 3 的在 scoretable 中没有对应的 studentId
内连接:
select * from student,scoreTable where student.id = scoretable.studentId;
+----+------+-----------+-------+
| id | name | studentId | score |
+----+------+-----------+-------+
| 1 | 张三 | 1 | 97 |
| 2 | 李四 | 2 | 86 |
+----+------+-----------+-------+
当进行内连接的时候因为student中的id为3 的和scoretable中的studentId为6的不匹配所以就被筛除了没有查询出来
外连接:
当两张表不是一一对应的时候,外连接又可以分为 左外连接 和 右外连接
左外连接:left join on
select * from student left join scoreTable on student.id = scoretable.studentId;
+----+------+-----------+-------+
| id | name | studentId | score |
+----+------+-----------+-------+
| 1 | 张三 | 1 | 97 |
| 2 | 李四 | 2 | 86 |
| 3 | 王五 | NULL | NULL |
+----+------+-----------+-------+
左外连接会把左表的结果尽量显示出来,如果右表中没有对应的记录,就使用NULL填充
右外连接:right join on
select * from student right join scoreTable on student.id = scoretable.studentId;
+------+------+-----------+-------+
| id | name | studentId | score |
+------+------+-----------+-------+
| 1 | 张三 | 1 | 97 |
| 2 | 李四 | 2 | 86 |
| NULL | NULL | 6 | 73 |
+------+------+-----------+-------+
右外连接会把右表的结果尽量显示出来,如果左表中没有对应的记录,就使用NULL填充
1.4 自连接
自连接:自己和自己进行笛卡尔积
自连接使用场景:当行与行进行比较时,就可以使用自连接,将行转成列进行比较
现在有两张表,分别为 scoretable 和 course
scoretable 表:
select * from scoretable;
+-------+------------+-----------+
| score | student_id | course_id |
+-------+------------+-----------+
| 70 | 1 | 1 |
| 96 | 1 | 2 |
| 97 | 1 | 3 |
| 80 | 2 | 1 |
| 92 | 2 | 2 |
| 86 | 2 | 3 |
| 91 | 3 | 1 |
| 76 | 3 | 2 |
| 77 | 3 | 3 |
+-------+------------+-----------+
course 表:
select * from course;
+----+------+
| id | name |
+----+------+
| 1 | 语文 |
| 2 | 数学 |
| 3 | 英语 |
+----+------+
现在我们要查询哪些同学的语文成绩比英语成绩低
首先自连接,将行转换成列:
select * from scoretable,scoretable;
ERROR 1066 (42000): Not unique table/alias: 'scoretable'
自己跟自己连接名字不能重复
那表名不能重复,那还如何自连接呢?
答:可以起别名,起别名不光可以对列,还可以对表
select * from scoretable as s1,scoretable as s2;
自连接排列组合的时候会产生大量无效的数据,所有就需要指定连接条件
指定连接条件,将有效数据筛选出来:
select * from scoretable as s1,scoretable as s2
where s1.student_id = s2.student_id;
自连接的时候只有当 student_id 相等时才表示有效数据
添加条件,将左边表的语文成绩和右边表的英语成绩查询出来:
有效成绩查询出来后,就需要加上条件查询出左边的语文成绩和右边的英语成绩
select * from scoretable as s1,scoretable as s2
where s1.student_id = s2.student_id
and s1.course_id = 1 and s2.course_id = 3;
+-------+------------+-----------+-------+------------+-----------+
| score | student_id | course_id | score | student_id | course_id |
+-------+------------+-----------+-------+------------+-----------+
| 70 | 1 | 1 | 97 | 1 | 3 |
| 80 | 2 | 1 | 86 | 2 | 3 |
| 91 | 3 | 1 | 77 | 3 | 3 |
+-------+------------+-----------+-------+------------+-----------+
这样就将左侧的语文成绩查询出来了,右侧的英语成绩查询出来了
添加条件,将语文成绩比英语成绩低的同学查询出来:
接下来就要查询哪些同学的语文成绩比英语成绩低
select * from scoretable as s1,scoretable as s2
where s1.student_id = s2.student_id
and s1.course_id = 1 and s2.course_id = 3 and s1.score < s2.score;
+-------+------------+-----------+-------+------------+-----------+
| score | student_id | course_id | score | student_id | course_id |
+-------+------------+-----------+-------+------------+-----------+
| 70 | 1 | 1 | 97 | 1 | 3 |
| 80 | 2 | 1 | 86 | 2 | 3 |
+-------+------------+-----------+-------+------------+-----------+
2 rows in set (0.00 sec)
这样就把语文成绩比英语成绩低的学生信息查询出来了
1.5 子查询
子查询:把多个 SQL 组合成一个
在实际开发中,子查询得慎用。因为子查询可能会构造出非常复杂,非常不好理解的 SQL。
写代码一般要么追求可读性和可维护性,要么追求程序的运行速度
1.5.1 单行子查询
单行子查询:返回一行记录的子查询
student 表:
select * from student;
+----+----------+------+
| id | class_id | name |
+----+----------+------+
| 1 | 1 | 张三 |
| 2 | 1 | 李四 |
| 3 | 2 | 王五 |
| 4 | 3 | 赵六 |
| 5 | 2 | 王七 |
+----+----------+------+
现在查询“张三”的同班同学,根据 class_id 进行查询
分开查询:
//查询出张三的class_id
select class_id from student where name = '张三';
+----------+
| class_id |
+----------+
| 1 |
+----------+
//查询出来的张三的class_id为 1,再查询除了张三以外的class_id 为1的同学
select * from student where class_id = 1 and name != '张三';
+----+----------+------+
| id | class_id | name |
+----+----------+------+
| 2 | 1 | 李四 |
+----+----------+------+
单行子查询:
select * from student where
class_id = ( select class_id from student where name = '张三')
and name != '张三';
+----+----------+------+
| id | class_id | name |
+----+----------+------+
| 2 | 1 | 李四 |
+----+----------+------+
1.5.2 多行子查询
多行子查询:返回多行记录的子查询
scoretable 表:
select * from scoretable;
+-------+------------+-----------+
| score | student_id | course_id |
+-------+------------+-----------+
| 70 | 1 | 1 |
| 96 | 1 | 2 |
| 97 | 1 | 3 |
| 80 | 2 | 1 |
| 92 | 2 | 2 |
| 86 | 2 | 3 |
| 91 | 3 | 1 |
| 76 | 3 | 2 |
| 77 | 3 | 3 |
+-------+------------+-----------+
course 表:
select * from course;
+----+------+
| id | name |
+----+------+
| 1 | 语文 |
| 2 | 数学 |
| 3 | 英语 |
+----+------+
查询每位同学的“语文”“英语”课程的成绩信息
普通查询:
//首先查询出语文和英语成绩对应的id
select id from course where name = '语文' or name = '英语';
+----+
| id |
+----+
| 1 |
| 3 |
+----+
//再根据查询出来的语文英语对应的id,在 scoretable表中查询
select * from scoretable where course_id = 1 or course_id = 3;
+-------+------------+-----------+
| score | student_id | course_id |
+-------+------------+-----------+
| 70 | 1 | 1 |
| 97 | 1 | 3 |
| 80 | 2 | 1 |
| 86 | 2 | 3 |
| 91 | 3 | 1 |
| 77 | 3 | 3 |
+-------+------------+-----------+
多行子查询:
select * from scoretable where course_id
in(select id from course where name = '语文' or name = '英语');
+-------+------------+-----------+
| score | student_id | course_id |
+-------+------------+-----------+
| 70 | 1 | 1 |
| 97 | 1 | 3 |
| 80 | 2 | 1 |
| 86 | 2 | 3 |
| 91 | 3 | 1 |
| 77 | 3 | 3 |
+-------+------------+-----------+
1.5.3 合并查询
合并查询:就是将两个查询结果集,合并成一个
在实际应用中,为了合并多个查询的执行结果,可以使用集合操作符 union,union all。使用UNION 和UNION ALL时,前后查询的结果集中,字段需要一致
union操作符
union操作符用于取得两个结果集的并集,当使用该操作符时,会自动去掉结果集中的重复行
course 表:
select * from course;
+----+------+
| id | name |
+----+------+
| 1 | 语文 |
| 2 | 数学 |
| 3 | 英语 |
| 6 | 化学 |
| 7 | 物理 |
+----+------+
现在查询 id 小于等于 2 或者 name 为 "英文" 的课程信息
select * from course where id <= 2 union select * from course where name = '英语';
+----+------+
| id | name |
+----+------+
| 1 | 语文 |
| 2 | 数学 |
| 3 | 英语 |
+----+------+
看到这里大家可能有个疑问,明明可以用 or 也能实现,为什么还要用 union?
答:用 or 查询只能时来自于同一个表,如果用 union 查询可以时来自于不同的表,子要查询的结果列匹配即可,匹配就是列的类型一样、列的一样、列的名字一样
union all 操作符
union all 操作符用于取得两个结果集的并集,当使用该操作符时,不会去掉结果集中的重复行
select * from course where id < 3 union all select * from course where name = '数学';
+----+------+
| id | name |
+----+------+
| 1 | 语文 |
| 2 | 数学 |
| 2 | 数学 |
+----+------+
相关文章:

【MySQL联合查询】轻松实现数据关联
1、联合查询 联合查询又称为多表查询,它的基本执行过程就是笛卡尔积 1.1 认识笛卡尔积 那么什么是笛卡尔积呢? 答:笛卡尔积就是将两张表放在一起进行计算,把第一张表的每一行分别取出来和第二张表的每一行进行连接,得到…...

Windows安装Ubuntu双系统
Windows安装Ubuntu双系统 1.下载Ubuntu 16.04,地址https://releases.ubuntu.com/16.04/ 2.下载Rufus,地址https://rufus.ie/zh/ 3.准备U盘,烧录系统 4.磁盘分区 5.重启,按住shift键 本人电脑是联想小新 Windows11系统࿰…...
【大数据之Hadoop】三十四、Hadoop综合调优之小文件优化方法
1 Hadoop小文件弊端 HDFS上每个文件都要在NameNode上创建对应的元数据,这个元数据的大小约为150byte,这样当小文件比较多的时候,就会产生很多的元数据文件,一方面会大量占用NameNode的内存空间,另一方面就是元数据文件…...

周赛 Round#3 题解
又不能放图片,又不能写学校,你让我怎么办啊!! 系列文章目录 1.周赛 Round#1 2.周赛 Round#2 前言 这是周赛第三轮。//涉及隐私原因,博文里不放题目,要看的去http://0241:101:610:801.22222 划分字符串贪…...

详解HTTPS加密过程
目录 前言 HTTPS是什么 HTTPS的工作过程 引入对称加密 引入非对称加密 引入证书 总结 前言 对于HTTP上篇文章已经做了详细的解释了。众所周知,HTTPS要比HTTP要安全,但是为什么HTTPS要比HTTP安全呢? 这篇文章主要研究HTTPS的加密机制…...

聚观早报 | ChatGPT登顶美区iOS免费榜;库克不满苹果首款MR设备
今日要闻:ChatGPT登顶美区iOS免费榜;库克不满苹果首款MR设备;索尼正开发小尺寸折叠屏手机;万达辟谣大规模裁员;智能仿生手让截肢者重获手心的温度 ChatGPT登顶美区iOS免费榜 ChatGPT 在 iOS 美区免费 App 排行榜上位列…...

position:sticky-粘性吸附布局
一、描述 就是在一个滚动的容器里,将一个子元素设置为postion:sticky 在元素显示在可视区域内,显示的效果与position:relative 一致,当元素被滑动出可视区域外是,显示效果与position:fixed一致 二、注意事项 1、父元素需要存在滚动(overflow:auto&…...

【MySQL】-【数据库的设计规范】
文章目录 为什么需要数据库设计范式范式简介范式都包括哪些键和相关属性的概念第一范式(1st NF)第二范式(2nd NF)第三范式(3rd NF) 反范式化概述应用举例反范式化的新问题反范式的适用场景 BCNF(巴斯范式)案例案例一案例二 第四范式案例案例一案例二 第五范式、域键范式范式的实…...
全面解析缓存应用经典问题
1、前言 随着互联网从简单的单向浏览请求,发展为基于用户个性信息的定制化以及社交化的请求,这要求产品需要做到以用户和关系为基础,对海量数据进行分析和计算。对于后端服务来说,意味着用户的每次请求都需要查询用户的个人信息和…...

Java版本企业电子招采系统源码——信息数智化招采系统
信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、Stre…...

Rust每日一练(Leetday0005) 罗马数字、公共前缀、三数之和
目录 13. 罗马数字转整数 Roman to Integer 🌟 14. 最长公共前缀 Longest Common Prefix 🌟 15. 三数之和 3Sum 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日…...
【告别校园,迎接未来】
作为一个曾经的大学生,我的四年大学时光充满了起伏和挑战。回顾这段时光,我深刻认识到了自己的不足,同时也感悟了一些珍贵的人生经验和收获。 我是一个比较内向的人,进入大学后感觉有些孤独,难以适应新的环境和生活方…...

SaaS系统用户权限设计
SaaS系统用户权限设计 学习目标: 理解RBAC模型的基本概念及设计思路 了解SAAS-HRM中权限控制的需求及表结构分析完成组织机构的基本CRUD操作 完成用户管理的基本CRUD操作完成角色管理的基本CRUD操作 组织机构管理 需求分析 需求分析 实现企业组织结构管理࿰…...

我们为什么还要学习Altium Designer?
Altium Designe(简称“AD”)是电子设计领域中备受推崇的软件工具之一,拥有强大的功能和灵活的设计环境,也是要用最广泛的EDA工具之一,为电子工程师提供了无限可能,但很多工程师学完AD基本操作就转投其他EDA…...

Q1业绩整体回暖,影视行业找到增长新路径
凛冬已过,影视行业恢复了生机。 数据显示,今年一季度,影视院线板块全部上市公司分别实现营收、归母净利111.86亿元、10.15亿元,同比增幅为1.44%和53.76%。在经济复苏的背景下,影视行业实现了扭亏为盈和跨越式增长。 …...

Zabbix
概述 作为一个运维,需要会使用监控系统查看服务器系统性能、应用服务状态和网站流量指标等,利用监控系统的数据去了解网站上线发布的结果和健康状态。 利用一个优秀的监控软件,我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器…...

OpenHarmony支持HDMI接口声卡适配说明
高清多媒体接口(High Definition Multimedia Interface,HDMI )是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。HDMI可用于机顶盒、DVD播放机、个人计算机、电视、游戏主机、综合扩大机、数字音响与电视机等设…...
AtCoder Beginner Contest 300G - P-smooth number解题报告
AtCoder Beginner Contest 300G - P-smooth number解题报告 1 题目链接 传送门 2 题目大意 题目:P-光滑数的数量 题目大意: 在 1 1 1 到 n n n 中,有多少个数的所有质因数均不超过 p ( p ≤ 100 ) p\ (p\leq100) p (p≤100)。 3 解…...

数据分析与预处理常用的图和代码
1.训练集和测试集统计数据描述之间的差异作图: def diff_color(x):color red if x<0 else (green if x > 0 else black)return fcolor: {color}(train.describe() - test.describe())[features].T.iloc[:,1:].style\.bar(subset[mean, std], alignmid, colo…...

Http与Https 比较
目录 1、HTTP(HyperText Transfer Protocol:超文本传输协议) 2、HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议) 3、HTTP 与 HTTPS 区别 4、HTTPS 的工作原理 1、HTTP(HyperTex…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...