目录
1. 外键
子表 emp
主表(有外键的是主表) dept
操作:
主表外键改变 从表也变 update cascade
主表外键删除 从表对应数据也删除 delete cascade
设置外键 alter table emp add constraint foreign key(dept_id) references dept(id) update cascade on delete cascade
2. 多表关系
2.1 一对多
2.2 多对多
2.3 一对一
外键 唯一型 unique -> 做单表拆分 ->
3 多表查询
3.1消除笛卡尔积
select * from emp , dept where emp.dept_id = dept.id;
3.2 内连接 -> 两表的交集
-- 查询每一个员工的姓名 及关联的部门名称
-- 隐使内连接
select emp.name, dept.name from emp , dept where emp.dept_id = dept.id ;
select e.name, d.name from emp e , dept d where e.dept_id = d.id ; // 字段被as 之后 就只能用as 之后的名称
-- 显示内连接
select e.name, d.name from emp e inner join dept d on emp.dept_id = dept.id ;
select e.name, d.name from emp e join dept d on emp.dept_id = dept.id ; // inner 可以省略
3.3 外连接
3.3.1 左外连接 -> 左边表的全部和 两表的交集
-- 查询emp表全部数据 已经dept 部门信息
select e.* , d.name from emp e left outer join dept d on e.dept_id = d.id;
select e.* , d.name from emp e left join dept d on e.dept_id = d.id; // outer可以省略
3.3.2 右外连接-> 右边表的全部信息 以及两表的交集
-- 查询dept表全部数据 和对应员工信息
select d* , e.* from emp e right outer join dept d on e.dept_id = d.id;
3.4 自联接
-- 查询员工的领导 单表中查询 managerid领导字段
-- 内连接
select a.name , b.name from emp a, emp b where a.managerid = b.id;
-- 外连接
select a.name '员工', b.name '领导'from emp a left jion emp b on a.managerid = b.id;
3.5 联合查询 -> 把多次查询的结果合并
3.6 子查询
3.6.1 标量子查询
-- 查询 销售部的某个员工
select * from emp where dept_id = (select id from dept where name = '销售部')
3.6.2 列子查询
-- 查询销售部 和 市场部 所有员工
select * from emp where dept_id in (select id from dept where name = '销售部' or nam ='市场部')
3.6.3 行子查询
-- 查询xxx 的薪资 以及领导相同的员工信息
select * from emp where (salary , managerid) = (select salary ,managerid from emp where name = 'xxx');
3.6.4 表子查询
-- 查询 与 xxx yyy 职位薪资 相同的员工信息
select * from emp where(job, salary ) in (select job , salary from emp where name ='xxx' or name='yyy);