数据库——多表设计和多表查询
一、多表设计——外键约束
- 单表约束:主键约束;唯一约束;非空约束;
- 多表约束:外键约束;
例子:在员工表(employee)添加外键 (注:employee为员工表,dept为部门表,did为部门表的主键,dno为员工表的部门字段)
alter table employee add foreign key (dno) references dept(did);
1
二、多表设计——表关系介绍
- 一对多:例:一个部门有多个员工,一个员工在只能属于一个部门;
- 多对多:例:一个学生可以选择多门课程,一门课程可以被多个学生选择;
- 一对一:例:一个公司可以有一个注册地址,一个注册地址只能有一个公司;
三、多表设计——一对多关系
- 建表原则:在多的一方建立外键 指向一的一方的主键;
四、多表设计——多对多关系
- 建表原则:需要建立第三张表(中间表),在中间表中至少两个字段 分别作为外键,指向多对多双方的主键;
五、多表设计——一对一关系
- 唯一外键对应: 假设是一对多,再多的一方创建外键指向一的一方的主键,将外键设置为 unique;
- 主键对应: 将两个表的主键建立对应关系即可;
六、多表设计——多表分析及创建
七、多表查询——概述
1. 多表查询分类:
(1)连接查询
- 交叉连接:
cross join
查询到的是两个表的笛卡尔积;select * from 表1 cross join 表2;
select * from 表1, 表2;
- 内连接:
inner join
显式内连接:select * from 表1 inner join 表2 on 关联条件;
隐式内连接:select * from 表1, 表2 where 关联条件;
- 外连接:
outer join
左外连接:select * from 表1 left outer join 表2 on 关联条件;
右外连接:select * from 表1 right outer join 表2 on 关联条件;
(2)子查询 一个查询语句条件需要依赖另一个查询语句的结果;
八、多表查询——数据准备
九、多表查询——交叉连接
(开发中应用较少)
十、多表查询——内连接
十一、多表查询——外连接
十二、多表查询——内连接与外连接的区别
十三、多表查询——子查询
- 带
in
的子查询; - 带
exisit
的子查询; - 带
any
的子查询; - 带
all
的子查询;