--显示每个部门的员工数量 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;