Python学习之复习MySQL-Day7(多表查询)


文章声明⭐⭐⭐

  1. 该文章为我(有编程语言基础,非编程小白)的 MySQL复习笔记
  2. 知识来源为 B站UP主(黑马程序员)的MySQL课程视频,归纳为自己的语言与理解记录于此并加以实践
  3. 此前我已经学习过了MySQL,现在是在复习阶段,所以不是面向小白的教学文章
  4. 不出意外的话,我大抵会 持续更新
  5. 想要了解前端开发(技术栈大致有: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  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯丢匹德先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值