目录
一、多表关系表设计
项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表之间也存在着各种联系
多表关系主要由以下三种组成:
- 一对一
- 多对一(一对多)
- 多对多
二、一对一
一对一通常表示两张表之间的数据是一一对应关系,在实际开发中通常用来做单表的拆分
例如:
用户表
基本信息:用户id,姓名,性别,手机号,邮箱
身份信息:生日,民族,身份证号码,发证单位,身份证有效期(开始时间 结束时间)
当一张表表示的字段较多,且常用的只有基本信息,身份信息使用较少的情况下,为了提高查询效率,可以将一张用户大表拆成两个小表;基本信息**-user表 身份证信息-user_card表**
此时,user表和user_card表就是一对一关系
一对一表关系中,为了维护数据的一一映射关系,通常在一张表中定义一个关联字段,通过该字段映射另一张表中的数据id
例如:
user表:
id,name,sex,mobile,email,card_id
user_card表:
id,birthday,nationality,idcard,issued,expire_begin,expire_end
其中user表的card_id列对应user_card表的id列


三、表连接查询sql
内连接
select 别名1.列名1,别名2.列名2,...
from 表1 别名1 inner join 表2 别名2
on 连接条件
其中:inner可以省略
内连接查询两个表都有的数据
左/右外连接
select 别名1.列名1,别名2.列名2,...
from 表1 别名1 left join 表2 别名2
on 连接条件
select 别名1.列名1,别名2.列名2,...from 表1 别名1 right join 表2 别名2
on 连接条件
左/右外连接查询左/右表所有的数据
//1、通过左外连接试下查询所有用户的用户名和生日信息
select name,birthday
from t_user t1 left join t_user_card t2
on t1.card_id=t2.id
//2、通过内连接查询张三用户的身份证号码select name,idcard
from t_user t1 inner join t_user_card t2
on t1.card_id=t2.id
where name='张三'
//3、通过右外连接查询所有身份证号码、用户名select idcard,name
from t_user t1 RIGHT JOIN t_user_card t2
on t1.card_id=t2.id