多表设计
关系型数据库,实体与实体
一对多:
用户和订单:一个用户可以有多个订单,一个订单只属于一个用户
部门和员工:一个部门有多个员工,一个员工属于一个部门
多对多:
学生和课程:一个学生可以选择多门课程,一门课程被多个学生选择
运动员与体育项目:一个运动员可以报多个项目,一个项目有多个运动员
一对一:
公司与地址:一个公司有一个地址,一个地址也只能被一个公司占据
一对多:
在多的一方设置一个字段,当外键指向一的一方的主键
多对多:
建立中间表,至少有两个字段作为外键指向多对多双方的各自主键
一对一:
任意一方的主键作为另外一方的主键
建立外键的2种方式
1.建表的时候使用:
FOREIGN KEY(cid) REFERENCES customer(cid)
foreign key (cid) references customer(表名)(cid)
2.表已经创建好了:
ALTER TABLE orders ADD CONSTRAINT FOREIGN KEY(cid) REFERENCES customer(cid);
alter table orders(表名) add constraint foreign key (cid) references customer(表名)(cid)
多表查询
1.交叉连接
select * from customer,orders 表名;
获取的是两个表的笛卡尔积
2.内连接
inner join -----inner省略
显示内连接
select * from A表名 inner join B表名 on 条件
隐式内连接
select * from A表名,B表名 where条件
3.外连接
outer join
左外连接:
select * from A 表名 left outer join B表名 on条件
右外连接:
select * from A表名 right outer join B表名 on 条件
子查询:
一条SQL语句的查询,依赖另一条SQL查询语句