mysql 多表连接_一文搞定MySQL多表查询中的表连接(join)

本文详细介绍了MySQL中多表查询的原理和实践,包括一对一、一对多、多对多关系的表连接,以及各种连接类型如内连接、左连接、右连接的应用。通过实例展示了等值连接、不等连接、自然连接、自连接和笛卡尔积连接的查询方式,帮助读者深入理解SQL中的表连接操作。
摘要由CSDN通过智能技术生成

SQL最强大的功能之一就是能在数据检索查询的执行中连接(JOIN)表。连接是利用SQL的SELECT能执行的最重要的操作,很好地理解连接及其语法是学习SQL的一个极为重要的组成部分。

SQL查询的基本原理

  • 单表查询:
    根据WHERE条件过滤表中的记录,然后根据SELECT指定的列返回查询结果。
  • 两表连接查询:
    使用ON条件对两表进行连接形成一张虚拟结果集;然后根据WHERE条件过滤结果集中的记录,再根据SELECT指定的列返回查询结果。
  • 多表连接查询:
    先对第一个和第二个表按照两表连接查询,然后用用连接后的虚拟结果集和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一张虚拟结果集,然后根据WHERE条件过滤虚拟结果集中的记录,再根据SELECT指定的列返回查询结果。
多表连接的结果通过三个属性决定
  • 方向性:在外连接中写在前边的表为左表、写在后边的表为右表。
  • 主附关系:主表要出所有的数据范围,附表与主表无匹配项时标记为NULL,内连接时无主附表之分。
  • 对应关系:关键字段中有重复值的表为多表,没有重复值的表为一表。

表对应关系

一对一关系

在一对一关系中,A 表中的一行最多只能匹配于 B 表中的一行,反之亦然。如果相关列都是主键或都具有唯一约束,则可以创建一对一关系。

这种关系并不常见,因为一般来说,按照这种方式相关的信息都在一个表中。可以利用一对一关系来:

  • 分割具有多列的表。
  • 由于安全原因而隔离表的一部分。
  • 保存临时的数据,并且可以毫不费力地通过删除该表而删除这些数据。
  • 保存只适用于主表的子集的信息。
3b73b436620fea2870582b14a0fe69e1.png

一对多关系

一对多关系是最普通的一种关系。在这种关系中,A 表中的一行可以匹配 B 表中的多行,但是 B 表中的一行只能匹配 A 表中的一行。例如,部门表和 人员表之间具有一对多关系:每个部门有很多员工,但是每个员工只属于一个部门。

只有当一个相关列是一个主键或具有唯一约束时,才能创建一对多关系。

6c6b3c4465516f104c0de6c7cd171561.png

多对多关系

在多对多关系中,A 表中的一行可以匹配 B 表中的多行,反之亦然。要创建这种关系,需要定义第三个表,称为结合表,它的主键由 A 表和 B 表的外部键组成。

2abe13729529f477262df09fd1014d37.png

表连接方式

不同的数据分析工具 支持的表连接方式
Oracle/ sql server/ Tableau/ Python 内连接(inner join)、左连接(left  join)、右连接(right join)、全连接(full join)
MySQL 内连接(inner join)、左连接(left join)、右连接(right join)
Power BI 内连接、左连接、右连接、全连接、左反连接、右反连接
示例表格

员工表 emp

<
empno ename job mgr hiretime sal
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值