select e.*, d.*from tb_emp e leftjoin tb_dept d
on e.dept_id=d.did;
3.3.2 右外连接
select e.*, d.*from tb_dept d rightjoin tb_emp e
on e.dept_id=d.did;
3.3 小结
1 外连接以某表为主,会将关联上的数据 和 没有关联上的数据 都查询出来
2 左外连接和右外连接 可以相互转化
4 自连接查询
4.1 问题
在员工表, 查询员工的姓名和上级的姓名
4.2 解决
select yg.ename 员工姓名,sj.ename 上级姓名
from tb_emp yg leftjoin tb_emp sj
on yg.manager=sj.eid;
5 子查询
子查询:一条select语句结果作为另一条select语法一部分(查询条件,查询结果,表等)。
5.1 问题
需求1 查询归属于研发部的员工信息
# 方案一 分解式# 1.1 在部门表 根据部门名称查询研发部对应的编号select did from tb_dept
where dname='研发部'# 1.2 在员工表 根据研发部的编号查询所属的员工信息select*from tb_emp
where dept_id =1# 方案二 合并式select*from tb_emp
where dept_id =(select did from tb_dept
where dname='研发部')
需求2 查询归属于研发部的员工信息 且 显示部门信息
# 方案一select e.*, d.*from tb_emp e innerjoin tb_dept d
on e.dept_id = d.did
where d.dname='研发部';# 方案二# 2.1 查询研发部信息select*from tb_dept where dname='研发部'# 2.2 将2.1的结果当做临时表处理select e.*, d.*from tb_emp e innerjoin(select*from tb_dept where dname='研发部') d
on e.dept_id = d.did;
需求3 查询归属于研发部和行政部的员工信息
# 3.1 查询研发部和行政部的部门编号select did from tb_dept
where dname in('研发部','行政部');# 3.2 将3.1的结果作为参数值使用select*from tb_emp
where dept_id in(select did from tb_dept
where dname in('研发部','行政部'));
需求4 查询归属于研发部和行政部的员工信息 且 显示部门信息
# 方案一select e.*, d.*from tb_emp e innerjoin tb_dept d
on e.dept_id = d.did
where d.dname in('研发部','行政部');# 方案二# 4.1 查询研发部和行政部信息select*from tb_dept where dname in('研发部','行政部')# 4.2 将2.1的结果当做临时表处理select e.*, d.*from tb_emp e innerjoin(select*from tb_dept where dname in('研发部','行政部')) d
on e.dept_id = d.did;