Mysql连表之一对多

时间:2021-04-20 11:58:12

引言

表:part

Mysql连表之一对多

有表如上所示,当成员达到一定数量时,我们需要开启大量的空间存放他们所在的部分,部门名称又长,而且存在大量重复,十分浪费存储空间。

我们将表一分为二

表1:part

Mysql连表之一对多

表2:person

Mysql连表之一对多

何为一对多呢?

在part表中的一条数据对应person表中多条数据

表1:part

Mysql连表之一对多

 表2:person

Mysql连表之一对多

设置外键

  • 创建关联
  • 创建约束:在part表中的一条数据对应person表中多条数据

Mysql连表之一对多

CREATE TABLE person (
nid int(11) NOT NULL AUTO_INCREMENT,
name varchar(32) NOT NULL,
email varchar(32) NOT NULL,
part_nid int(11) DEFAULT NULL,
PRIMARY KEY (nid),
CONSTRAINT person_ibfk_1 FOREIGN KEY (part_nid) REFERENCES part (nid),
)

连表方式

A left join B on a.xx = b.xx
以A表为主
将A中所有数据罗列出来
B,只显示于A相应的数据
A inner join B on a.xx = b.xx
自动忽略未建立关系的数据

 A left B          

Mysql连表之一对多

 B left A  

Mysql连表之一对多

  A inner B

Mysql连表之一对多

A left B left C   

Mysql连表之一对多