Oracle中多表查询

    xiaoxiao2023-11-25  150

    --多表查询中的一些概念 --笛卡尔积(意义不大) --(两张表的数据量相乘) --(就是一张表中所有的纪录一一和另一张表中所有的记录作匹配) select * from emp e, dept d;

    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;

    最新回复(0)