Oracle操作5

--显示每个部门的员工数量
select count(ROWID) from emp group by deptno;
--显示每种职位名及月薪
select job,round(avg(sal+nvl(comm,0))) as "岗位平均月薪" from emp group by job;
--显示每年入职的员工数量及年份
select count(ROWID) as "员工数量",to_char(hiredate,'yyyy') as "入职年份" from emp group by to_char(hiredate,'yyyy');
--显示部门平均月薪大于2000的部门编号及平均月薪
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
--显示每个部门的员工数量
select count(ROWID) from emp group by deptno;
--显示每种职位名及月薪
select job,round(avg(sal+nvl(comm,0))) as "岗位平均月薪" from emp group by job;
--显示每年入职的员工数量及年份
select count(ROWID) as "员工数量",to_char(hiredate,'yyyy') as "入职年份" from emp group by to_char(hiredate,'yyyy');
--显示部门平均月薪大于2000的部门编号及平均月薪
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
--查询出不是总裁(PRESIDENT)的职位名以及该职位的员工总月薪,
select * from salgrade;
--查询出员工姓名及其所在部门名称
select emp.ename,dept.dname from emp inner join dept on emp.deptno=dept.deptno;
--查询出月薪大于2000的员工姓名、月薪、受雇日期及其所在部门名称,输出结果按受雇日期排序
select emp.ename,emp.sal,emp.hiredate,dept.dname from emp inner join dept on emp.deptno=dept.deptno where emp.sal>2000 order by emp.hiredate;
--查询每个员工姓名、月薪及月薪等级
select emp.ename,emp.sal,salgrade.grade from emp inner join salgrade on emp.sal between salgrade.losal and salagrade.hisal;
--三表关联
--4.查询出每个员工的姓名、职位、月薪、部门名称、部门位置、以及月薪的等级,结果按员工编号排序
--三表关联思路:先将两表关联,再将关联结果与第三张表进行关联
select e.ename,e.job,e.sal,d.dname,d.loc,s.grade from emp e inner join dept d on e.deptno = d.deptno inner join salgrade s on e.sal between s.losal and s.hisal
--查询出所有的部门编号、部门名及该部门下的所有员工的姓名
select d.deptno,d.dname,e.ename from dept d left outer join emp e on d.deptno = e.deptno;
--查询出每个员工的编号、姓名、职位及它的领导的姓名及职位。 
select e1.empno,e1.ename,e1.job,e2.ename,e2.job from emp e1 left outer join emp e2 on e1.mgr = e2.empno;
--查询出每个员工的姓名、职位、月薪、所属部门名、月薪等级及其领 导的姓名、职位、所属部门名、月薪等级
select e.ename, e.job, e.sal, d.dname, s.grade, m.ename, m.job,d1.dname, a.grade from emp e left outer join dept d on e.deptno=d.deptno
left outer join salgrade s on e.sal between s.losal and s.hisal
left outer join emp m on e.mgr=m.empno
left outer join dept d1 on m.deptno=d1.deptno
left outer join salgrade a on e.sal between a.losal and a.hisal;
--内连接
select * from emp e,dept d where e.deptno=d.deptno;
--左外连接(emp为主表,dept为从表,从表加+)
select * from emp e,dept d where e.deptno=d.deptno(+);
--右外连接(emp为从表,dept为主表,从表加+)
select * from emp e,dept d where e.deptno(+)=d.deptno;
--注意:sql92没有全外连接,全外连接只能用sql99的语法查询
--交叉连接(笛卡尔积)
select * from emp e,dept d;
--sql99与sql92优缺点对比
--sql92优点:书写方便
--sql92缺点:因为连接条件和过滤条件都写在where子句中,如果条件较多,顺序较乱,不易阅读
--sql99优点:阅读简便
--sql99缺点:不易书写

--查询出员工姓名及其所在的部门名。 
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
--查询出所有的部门编号、部门名及该部门下的所有员工的姓名。 
select e.deptno,dname,e.ename from emp e,dept d where e.deptno=d.deptno;
--查询出每个员工的姓名、所属部门名称、月薪等级及其领导的姓名、所属部门名称
select e.ename,d.dname,s.grade,m.ename,p.dname from emp e,dept d,salgrade s,emp m,dept p
where e.deptno=d.deptno and e.sal between s.losal and s.hisal and e.mgr=m.empno and m.deptno=p.deptno;
原文地址:https://www.cnblogs.com/qilin20/p/12434742.html