EMP表有14条数据,DEPT表有4条数据
--等值连接 select * from emp e,dept d where e.deptno=d.deptno; --内连接 select * from emp e inner join dept d on e.deptno=d.deptno;跟上面的等值连接一样
–查询出所有部门,以及部门下的员工信息。【外连接】 –至于是左外连接还是右外连接就是两张表换换位置而已,统称为外连接 –left join是显示的左侧表的全部数据,right join相反
select * from emp e right join dept d on e.deptno=d.deptno;其中有一个部门没人
--查询所有员工信息,以及员工所属部门 select * from emp e left join dept d on e.deptno=d.deptno;查出结果和内连接一样,主要是因为每个员工都有自己的所属部门,假如有个员工没有所属部门,那么此时这个左外连接查询就会比内连接多一条数据,因为上面的内连接查出来的都是有所属部门的员工,✌耶!
============================= 这个相当于上面的右外连接
--oracle中专用外连接 select * from emp e , dept d where e.deptno(+)=d.deptno;看结果
select * from emp e , dept d where e.deptno=d.deptno(+);这个相当于上面的左外连接
--查询出员工姓名,员工领导姓名 --自连接:自连接其实是站在不同的角度把一张表看成多张表 select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno; --查询出员工姓名,员工部门名称,员工领导姓名,员工领导部门名称 select e1.ename,d1.dname,e2.ename,d2.dname from emp e1,emp e2,dept d1,dept d2 where e1.mgr=e2.empno and e1.deptno=d1.deptno and e2.deptno=d2.deptno; --查询出员工姓名,员工部门名称,员工工资等级, --员工领导姓名,员工领导部门名称,领导工资等级 select e1.ename,d1.dname,s1.grade,e2.ename,d2.dname,s2.grade from emp e1,emp e2,dept d1,dept d2,salgrade s1,salgrade s2 where e1.mgr=e2.empno and e1.deptno=d1.deptno and e2.deptno=d2.deptno and e1.sal between s1.losal and s1.hisal and e2.sal between s2.losal and s2.hisal; --查询出员工姓名,员工部门名称,员工工资等级, --员工领导姓名,员工领导部门名称,领导工资等级 select e1.ename,d1.dname, decode(s1.grade, 1,'一级', 2,'二级', 3,'三级', 4,'四级', 5,'五级')grade, e2.ename,d2.dname, decode(s2.grade, 1,'一级', 2,'二级', 3,'三级', 4,'四级', 5,'五级')grade from emp e1,emp e2,dept d1,dept d2,salgrade s1,salgrade s2 where e1.mgr=e2.empno and e1.deptno=d1.deptno and e2.deptno=d2.deptno and e1.sal between s1.losal and s1.hisal and e2.sal between s2.losal and s2.hisal;