4.3.4 join on
on 连接,可做等值连接,非等值连接,自连接,可以解决一切连接,关系列必须区分查询所有员工姓名及所在部门的名称。
查询所有员工的姓名,工资以及工资等级。
--查看所有员工的姓名,编号,以及员工所属的部门编号,部门名称
--查询的数据:员工的姓名,编号,以及员工所属的部门编号,部门名称
--数据来源:emp,dept
--连接条件: emp.deptno=dept.deptno
--使用on连接实现
--同名列前是否需要加限定词,如果使用的自然间连接using 连接,
--不能加,如果不是,需要加
select ename,empno,e.deptno,dname
from emp e
join dept d
on e.deptno=d.deptno;
两张表的连接:
--查看每个员工的姓名,工资,所属的部门编号,工资等级
--查询的数据:员工的姓名,工资,所属的部门编号,工资等级
--数据来源:emp salgrade
--连接条件:sal between losal and hisal (连接条件是最低工资和最高工资得再工资等级里面)
--on 实现
select ename,sal,deptno,grade from emp e join salgrade s on
sal between losal and hisal;
三张表的连接:
--查询30部门员工姓名,工资,部门编号,工资等级,部门名称
--查询的数据:员工名称,工资,部门编号,工资等级,部门名称
--数据来源:emp e ,salgrade s ,dept d
--连接条件: sal between losal and hisal (工资在工资等级最低工资和最高工资之间)
e.deptno=d.deptno (员工里面的部门编号要和部门表里面的部门编号要相等)
--题意条件: e,depyno=30 || d.deptno=30
select ename,sal,e.deptno ,grade ,dname
from emp e
join dept d
on e.deptno= d.deptno
join salgrade
on e.sal between losal and hisal
where e.deptno =30;
4.3.5 outer join
外连接,有主表和从表一说
left [outer] join on
left [outer] join using
right [outer] join on
right [outer] join using
--查看每一个员工的编号,员工名称,上级编号,上级名称
--(只要你是员工无论你有没有上级你都应该把你自己的信息显示出来,这里涉及到主表问题,员工表即是主表)
--查询数据:员工编号,员工名称,上级编号,上级名称
--数据来源:emp e ,emp m
--连接条件:e.mgr=m.empno
--(连接条件解释:员工表的上级编号要和上级表里面的员工编号一样)
select e.empno 员工编号,
e.ename 员工名称,
e.mgr 上级编号,
m.ename 上级名称,
from emp e
left outer join emp m
on e.mgr=m.empno;