MySQL多表关联
在设计数据库时,一般而言要求遵循数据库三范式(3 NF)(面试题)
1、设计的字段具有原子性(字段具有不可分割性)
2、每条记录具有唯一性 主键
3、外键
分表的重要性(垂直分表)
多表关联查询五种连接方式
1、交叉查询(笛卡儿积现象)
select *
from dept,emp
SELECT * from emp cross join dept;
2、内连接
SELECT *
FROM emp,dept
WHERE emp.deptid = dept.id
SELECT e.*,t.name as deptname, t.describle deptdesc from emp as e inner join dept t on (e.deptid = t.id)
3、外连接(外连接分为左外连接和右外连接)
SELECT e.*,d.name deptname, d.describle deptdesc FROM emp e LEFT JOIN dept d on(e.deptid=d.id);
SELECT e.*,d.name deptname, d.describle deptdesc FROM emp e RIGHT OUTER JOIN dept d on(e.deptid=d.id);
4、自然连接(真正开发用不到,作为一个知识点)、
SELECT * from emp natural join dept;
5、自连接
外键在约束自身的某个字段(如主键)
外键:constraint foreign key(新表的字段)references 主表(引用字段)
条件查询:select
from
where
group by
having
order by
limit
子查询:将一个查询结果作为条件的一部分写入到第二个sql中
select depthame from dept where deptid
表与表的关联关系
OneToOne(1 : 1 )
ManyToOne (n : 1)
ManyToMany (n : n)
外键约束
创建表的同时创建外键:
create table tName(
id........,
deptid int,
[constraint fk_xx_xx]foreign key(deptid) references dept(id) on delete restrict(cascade) on update restrict
)
为已经存在的表创建外键
alter table add tName [constrint fk_xx_xx] foreign
删除外键
alter table drop 外键名称;