一、多表关系
1.概述:项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构也存在着各种联系,基本上分为三种:
·一对多(多对一)
·多对多
·一对一
·一对多(多对一)
案例:部门与员工之间的关系
关系:一个部门对应着多个员工,一个员工对应一个部门
实现:在多的一方建立外键,指向一的一方的主键
·多对多
案例:学生与课程的关系
关系:一个学生可以选秀多门课程,一门课程也可以供多个学生选择
实现:建立第三张中间表,中间至少包含两个外键,分别关联两方主键
·一对一
案例:用户与用户详情的关系
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其它详情字段放在另一张表中,以提升操作效率
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(unique)
二、多表查询概述
1.概述:指从多张表中查询数据
2.笛卡尔积:笛卡尔乘积是指在数学中,两个集合A集合和B集合的所有组合情况。(多表查询时,需要消除无效的笛卡尔积)
例如:
而我只想要金庸总经办那条出现就可以了该怎么办?加条件where
改为select * from emp,dept where emp.dept_id=dept.id;即可
多表查询分类
三、内连接
内连接查询的是两张表交集的部分
内连接查询语法:
·隐式内连接:select 字段列表 from 表1,表2 where 条件;
·显式内连接:select 字段列表 from 表1[inner] join 表2 on 连接条件...;
四、外连接
外连接查询语法:
·左外连接:select 字段列表 from 表1 left [outer] join 表2 on 条件...;
相当于查询表1(左表)的所有数据包含表1和表2交集部分的数据
·右外连接:select 字段列表 from 表1 right [outer] join 表2 on 条件...;
相当于查询表2(右表)的所有数据包含表1和表2交集部分的数据
六、自连接
语法:select 字段列表 from 表A 别名A join 表A 别名B on 条件...;
自连接查询,是自己连接自己进行查询,可以是内连接查询,也可以是外连接查询。
七、联合查询-union,union all
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集
语法:
select 字段列表 from 表A...
union[all]
select 字段列表 from 表B...;
注意事项:
①对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
②union all会将全部的数据直接合并在一起,union会对合并后的数据去重。