--======================================多表关联查询
--查询员工编号,员工姓名,员工部门编号,员工部门名称,员工部门地址,中文显示员工工资等级,及领导编号,领导姓名,领导部门编号,领导部门名称,中文显示领导工资等级
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;--平均工资
网友评论