MySQL数据库:8、多表查询的方法与思路
2023-02-18 16:27:53 时间
一、多表查询思路
指需要处理多张具有关系的表数据时,可以通过多表查询方法来加快数据的处理和查询时间
数据准备
创建部门表:
create table dep(
id int primary key auto_increment,
name varchar(20)
);
创建员工信息表:
create table emp(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') not null default 'male',
age int,
dep_id int
);
插入数据:
insert into dep values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营'),
(205,'财务');
insert into emp(name,sex,age,dep_id) values
('jason','male',18,200),
('dragon','female',48,201),
('kevin','male',18,201),
('nick','male',28,202),
('owen','male',18,203),
('jerry','female',18,204);
1、笛卡尔积
- 介绍:
- 笛卡尔积是一种多表查询的方法名称,通过笛卡尔其可以对两张有对应关系的表格进行拼接(通过select 方法一次性读出两张表)
- 缺点:
- select 方法一次性读出了两张表,但是表的数据发生了错乱,字段发生了冲突,这种查询方式非常浪费资源,此种查询方式称为‘笛卡尔积’
1、1.代码实践
select * from emp,dep;
1、2.笛卡尔积进阶操作
- 介绍
- 通过对笛卡尔其将两张关系表进行连接时,可通过设置条件的方式来使数据进行匹配,通过此种方式可以节省笛卡尔积浪费的空间
- 缺点:
- 此种方式可以解决笛卡尔积浪费资源的问题,但是这种方法针对大数据的处理非常耗费时间
select * from emp,dep where emp.dep_id=dep.id;
2、连表操作
连表操作可以将两张有对应关系的表格进行拼接,为程序员在处理数据时提供了方便快捷的方法
通过学习了连表操作就可以连接N多张表
思路:将拼接之后的表格通过起别名的方式再去与另一张表格进行拼接,往复此操作就可以连接多张表格
2、1.内连接
-
关键词:inner jion
-
功能:可以拼接两张有对应关系表格的共有部分
SELECT * FROM emp INNER JOIN dep ON emp.dep_id=dep.id;
2、2.左连接
-
关键词:left jion
-
功能:可以拼接两张有对应关系的表格,关键词左边的表格为主表,若主从表中没有主表中对应的数据,则主表中该部分数据对应字段名下结果以Null填充
SELECT * FROM emp LEFT JOIN dep ON emp.dep_id=dep.id;
2、3.右连接
-
关键词:right jion
-
功能:可以拼接两张有对应关系的表格,关键词右边的表格为主表,若主从表中没有主表中对应的数据,则主表中该部分数据对应字段名下结果以Null填充
SELECT * FROM emp RIGHT JOIN dep ON emp.dep_id=dep.id;
2、4.全连接
-
关键词:union
-
功能:以左右表为基准 展示所有的数据 各自没有的全部NULL填充
select * from emp LEFT JOIN dep ON emp.dep_id=dep.id
UNION
SELECT * FROM emp RIGHT JOIN dep ON emp.dep_id=dep.id;
3、子查询
子查询的思路是将一条SQL语句用括号括起来当成另一条SQL语句的查询条件
很多时候表查询需要结合实际情况判断需要用那种,更多的时候其实是连表操作结合子操作进行使用
3、1.子查询代码实践
- 题目:求姓名jason的员工的部门名称
子查询类似于生活中解决问题的方式>>>:分布操作
推导流程
步骤1:先根据jason获取部门的编号
SELECT id FROM emp WHERE name='jason';
步骤2:在根据获取到部门编号去获取部门名称
SELECT name FROM dep WHERE id IN (SELECT dep_id FROM emp WHERE name='jason');
相关文章
- 杂牌机搞机之旅(二)————移植TWRP第三方Recovery并刷入
- 一次客户需求引发的K8S网络探究
- 一次minerd肉鸡木马的排查思路
- 从一条更新SQL的执行过程窥探InnoDB之REDOLOG
- MySql主从同步介绍
- 业务数据迁移上云的一些技术思考
- 水滴低代码搭建——6倍提效,新品首发素材审核系统实践之路
- MYSQL最朴素的监控方式
- 基于SPI的增强式插件框架设计
- 可视化服务编排在金融APP中的实践
- 国际计费系统基于Sharding-Proxy大数据迁移方案实践
- 文盘Rust -- 配置文件解析
- 重构指标之如何监控代码圈复杂度
- Acer宏碁笔记本触摸板失效解决方法
- 节省50%成本!京东云重磅发布新一代混合CDN产品
- 电商库存系统的防超卖和高并发扣减方案
- mysql 最大建议行数2000w,靠谱吗?
- 数据泄漏、删除事件频发,企业应如何构建安全防线?
- APP常用跨端技术栈深入分析
- 杂牌机搞机之旅(一)——获得root权限(刷入magisk)