Oracle学习(二)

2020-02-07  本文已影响0人  喵镹_張

--======================================多表关联查询
--查询员工编号,员工姓名,员工部门编号,员工部门名称,员工部门地址,中文显示员工工资等级,及领导编号,领导姓名,领导部门编号,领导部门名称,中文显示领导工资等级

select * from salgrade;
select * from emp;
select * from dept;


select e.empno,e.ename,decode(s.grade,1,'一级',2.'二级',3,'三级',4,'四级',5,'五级')grade,d.dname,e1.empno,e1.ename,decode(s1.grade,1,'一级',2,'二级',3,'三级',4,'四级',5,'五级')grade from emp e,emp el,dept d,salgrades,salgrade s1 where e.mgr=e1.empno and e.deptno=d.deptno and e.sal between s.losal and s.hisal and el.sal between sl.losal and s1.hisal

--======================================外连接
--1.查询员工编号,姓名,领导编号,领导姓名,包括没领导的
----left join on方式

select e1.empno,e1.ename,e2.empno,e2.ename from emp e1 left join emp e2 where e1.mgr on e2.empno;

----Orcl的(+)方式

select e1.empno,e1.ename,e2.empno,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno(+);

--2.查询出所有部门信息(包括没员工的部门)及部门下的员工信息

select * from emp,dept where emp.deptno(+)=dept.deptno;      --(+) 写在哪,就以对面为准

--===========子查询
--1.查询比雇员7654工资高,同时从事和7788的工作一样的员工

select * from emp where sal> (select sal from emp where empno=7654)
and job = (select job from emp where empno=7788);

--2.查询每个部门最低工资及最低工资的部门名称和雇员名称

select emp.empno,emp.ename,e1.minsal,e1.deptno from (select min(sal) minsal,deptno from emp group by deptno) e1,emp,dept
where e1.deptno = dept.deptno and emp.deptno = e1.deptno and e1.minsal=emp.sal;


select min(sal) minsal,deptno from emp group by deptno--查询最低工资
select * from dept;
select * from emp;

--===========课堂练习
--1.找到员工表中工资最高的前三名

select rownum,e.* from  (select emp.* from emp order by sal desc) e where rownum <=3;

--2.找到员工表中薪水大于本部门平均工资的所有员工

select emp.empno,emp.ename,e1.avgsal,e1.deptno,emp.sal from (select avg(sal) avgsal,deptno from emp group by deptno) e1,emp
where e1.deptno = emp.deptno and e1.avgsal < emp.sal;


select avg(sal) avgsal,deptno from emp group by deptno;--平均工资
上一篇 下一篇

猜你喜欢

热点阅读