目录
文章声明⭐⭐⭐
- 该文章为我(有编程语言基础,非编程小白)的 MySQL复习笔记
- 知识来源为 B站UP主(黑马程序员)的MySQL课程视频,归纳为自己的语言与理解记录于此并加以实践
- 此前我已经学习过了MySQL,现在是在复习阶段,所以不是面向小白的教学文章
- 不出意外的话,我大抵会 持续更新
- 想要了解前端开发(技术栈大致有:Vue2/3、微信小程序、uniapp、HarmonyOS、NodeJS、Typescript)与Python的小伙伴,可以关注我!谢谢大家!
让我们开始今天的学习吧!
多表查询
多表关系
由于业务需求、业务模块之间存在着很多关系,所以各个表结构之间也存在着各种联系,基本分为以下三种:
- 一对多(多对一)
- 多对多
- 一对一
一对多(多对一)
- 案例:部门与员工的关系
- 关系:一个部门对应多个员工,一个员工对应一个部门
- 实现:在多的一方建立外键,指向一的一方的主键

多对多
- 案例:学生与课程的关系
- 关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择
- 实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

一对一
- 案例:用户与用户详情的关系
- 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率
- 实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(unique)

多表查询概述
概念
从多张表中查询数据
笛卡尔积
笛卡尔积是指在数学中,两个集合A和B的所有组合情况。在多表查询时,需要消除无效的笛卡尔积
实例演示
mysql> select * from emp;
+----+--------+------+--------+---------+
| id | name | age | gender | dept_id |
+----+--------+------+--------+---------+
| 7 | Richie | 21 | 男 | 1 |
| 8 | Taylor | 34 | 女 | 2 |
| 9 | Mike | 26 | 男 | 3 |
| 10 | Lucy | 74 | 女 | 2 |
| 11 | Jack | 45 | 男 | 2 |
| 12 | Nancy | 19 | 女 | 1 |
+----+--------+------+--------+---------+
6 rows in set (0.00 sec)
mysql> select * from dept;
+----+-----------+
| id | dept_name |
+----+-----------+
| 3 | 保安部 |
| 1 | 职能部 |
| 2 | 销售部 |
+----+-----------+
3 rows in set (0.00 sec)
mysql> select * from emp,dept; # 下方出现了笛卡尔积现象,总共6*3=18条数据
+----+--------+------+--------+---------+----+-----------+
| id | name | age | gender | dept_id | id | dept_name |
+----+--------+------+--------+---------+----+-----------+
| 7 | Richie | 21 | 男 | 1 | 2 | 销售部 |
| 7 | Richie | 21 | 男 | 1 | 1 | 职能部 |
| 7 | Richie | 21 | 男 | 1 | 3 | 保安部 |
| 8 | Taylor | 34 | 女 | 2 | 2 | 销售部 |
| 8 | Taylor | 34 | 女 | 2 | 1 | 职能部 |
| 8 | Taylor | 34 | 女 | 2 | 3 | 保安部 |
| 9 | Mike | 26 | 男 | 3 | 2 | 销售部 |
| 9 | Mike | 26 | 男 | 3 | 1 | 职能部 |
| 9 | Mike | 26 | 男 | 3 | 3 | 保安部 |
| 10 | Lucy | 74 | 女 | 2 | 2 | 销售部 |
| 10 | Lucy | 74 | 女 | 2 | 1 | 职能部 |
| 10 | Lucy | 74 | 女 | 2 | 3 | 保安部 |
| 11 | Jack | 45 | 男 | 2 | 2 | 销售部 |
| 11 | Jack | 45 | 男 | 2 | 1 | 职能部 |
| 11 | Jack | 45 | 男 | 2 | 3 | 保安部 |
| 12 | Nancy | 19 | 女 | 1 | 2 | 销售部 |
| 12 | Nancy | 19 | 女 | 1 | 1 | 职能部 |
| 12 | Nancy | 19 | 女 | 1 | 3 | 保安部 |
+----+--------+------+--------+---------+----+-----------+
18 rows in set (0.00 sec)
mysql> select * from emp,dept where emp.dept_id = dept.id; # 添加条件即可消除笛卡尔积
+----+--------+------+--------+---------+----+-----------+
| id | name | age

最低0.47元/天 解锁文章
500

被折叠的 条评论
为什么被折叠?



