# MySQL教程 - 12 多表查询
前面查询数据的时候,都是查询一张表的数据,在前面也介绍了关系型数据库,多个表之间的数据是可能存在关联关系,已经讲解了如何在两张表之间建立外键约束关系。
下面讲解一下如何同时在多个表中查询数据。
# 12.1 多表关系
前面在介绍外键约束的时候,讲解了部门表和员工表,一个部门是有多个员工的,所以一个部门表的数据是对应多个员工的数据的。这里就涉及到多表之间的数据关系。
一般来说,多表之间的数据关系有以下三种情况:
- 一对多
- 一对一
- 多对多
# 1 一对多
再次拿部门表和员工表来举例,如下图:
一个部门有多个员工,所以部门表一条数据对应员工表多条数据,在子表(从表)存储父表(主表)的主键ID。
一对多是多表关系之中最常用的一种关系。例如学生和班级的关系、用户和订单的关系等等。
# 2 一对一
如果一个表中列很多,某些列很少访问、很占空间或者访问频率不一致,可以将一些字段分离到一个单独的表中。
例如用户的信息很多,我们可以将一些访问不频繁的字段分离到一个单独的表中,在这个表中存储用户的 ID,如下图:
上面的表结构关系和 一对多 是一样的,只是两个表之间的数据关系是一对一的。我们可以在从表存储主表的主键ID,同时设置唯一约束,防止在从表对应多条数据的错误。
一对一的关系中,这些数据是可以存储在一张表中的,通过分离存储,在查询数据的时候,可以降低表的查询宽度,避免了加载无关数据,只查询需要的字段,可以提高查询效率。
# 3 多对多
多对多也是一种经常用到的关系,例如学生与课程的关系中,一个学生可以选多个课程,一个课程也可以被多个人选。订单与商品的关系中,一个订单可以多个商品,一个商品可以被多个订单购买;在一个管理系统中,一个角色可以操作多个菜单,一个菜单也可以被多个角色拥有。这些都是多对多的关系。
下面以学生与课程的关系为例:
内容未完......