Oracle作业3
1、查询出有3个以上下属的员工信息(子查询--分级查询-having)
SELECT * FROM emp e WHERE (SELECT count(*) FROM emp WHERE e.empno=mgr)>=3;
2、查询所有大于本部门平均工资的员工信息(子查询--分组)
SELECT job,count(*) FROM emp WHERE sal> (SELECT avg(sal) FROM emp) GROUP BY job;
3、查询所有工资高于平均工资(平均工资包括所有员工)的销售人员('SALESMAN')(子查询--聚合函数)
SELECT*FROM emp WHERE job='SALESMAN' AND sal> (SELECT avg(sal) FROM emp);
4、查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位(子查询--聚合函数)
SELECT job,count(*) FROM emp WHERE sal> (SELECT avg(sal) FROM emp) GROUP BY job;
5、查看每个员工都工作在哪个城市
SELECT d.loc FROM emp e RIGHT JOIN dept d ON e.job = d.dname;
SELECT ename,loc FROM emp e,dept d WHERE e.deptno=d.deptno;
6、查看每个员工都工作在哪个城市并在结果集中显示40部门信息
SELECT ename,loc FROM emp e,dept d WHERE e.deptno=d.deptno AND e.deptno=40;
SELECT * FROM (SELECT a.deptno deptno, loc FROM emp a, dept d WHERE a.deptno = d.deptno) c WHERE c.deptno = 40;
7、查看每个员工的工资等级
SELECT e.*, s.grade FROM emp e, salgrade s WHERE sal BETWEEN losal and hisal;
8、查看每个员工的直属管理者
SELECT e.*, e2.ename FROM emp e,emp e2 WHERE e.mgr=e2.empno;
9、查询员工的基本信息,附加其上级的姓名(自连接)
SELECT e.*, e. ename FROM emp e;
10、显示所有职员的姓名及其所在部门的名称和工资(多表查询)
SELECT e.ename, d.dname, e.sal FROM emp e, dept d;
11、查询在研发部('RESEARCH')工作员工的编号,姓名,工作部门,工作所在地(多表查询)
SELECT e.empno, e.ename, d.dname, d.loc FROM emp e, dept d WHERE e.deptno = d.deptno AND d.dname = 'RESEARCH';
12、查询各个部门的名称和员工人数(分组+多表查询)
SELECT e.deptno, c FROM (SELECT COUNT(*) c, deptno FROM emp GROUP BY deptno) e, dept d WHERE e.deptno = d.deptno;
13、查询每个员工的信息及工资级别(用到表Salgrade)(多表查询)
SELECT e.*,s.grade FROM emp e,salgrade s WHERE sal BETWEEN losal AND hisal;
14、部门编号与7934相同的人有哪些?(子查询)
SELECT e.*,s.grade FROM emp e,salgrade s WHERE sal BETWEEN losal AND hisal;
15、参加工作比7788晚的人有哪些?(子查询)
SELECT e.*,s.grade FROM emp e,salgrade s WHERE sal BETWEEN losal AND hisal;
16、每个部门拿最少工资的人?(分组)
SELECT e.*,s.grade FROM emp e,salgrade s WHERE sal BETWEEN losal AND hisal;
17、查询姓名中第二个字母为L的人的工资(函数)
select ename,sal from emp where ename like '_L%';
18、列出工资前5名的人(子查询)
SELECT rownum rn, tt.* FROM (SELECT * FROM emp ORDER BY sal DESC) tt WHERE rownum < 6;
19、大于30部门最大工资的人?(子查询--分组)
SELECT * FROM emp WHERE sal > ALL(SELECT sal FROM emp WHERE deptno = 30);
20、工资高于本部门平均工资的人(拿上游工资的人)? (子查询--分组)
SELECT * FROM emp e, (SELECT AVG(sal) avgsal, deptno FROM emp GROUP BY deptno) b WHERE e.deptno = b.deptno;
21、工资相同的人有哪些?(子查询)
SELECT * FROM emp WHERE sal in (SELECT sal FROM emp GROUP BY sal HAVING COUNT(empno) > 1);
22、显示工资比'ALLEN'高的所有员工的姓名和工资(子查询)
SELECT e.ename, e.sal FROM emp e WHERE e.sal > (SELECT m.sal FROM emp m WHERE m.ename = 'ALLEN')
23、显示与'SMITH'从事相同工作的员工的详细信息(子查询)
SELECT*FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE dname='SMITH');
24、查询工资相同的员工的工资和姓名(子查询)
SELECT*FROM emp e WHERE (SELECT count(*) FROM emp WHERE sal=e.sal GROUP BY sal)> 1;
25、按工资进行排名,排名从1 开始,工资相同排名相同(如果两人并列第1 则没有第2 名,从第三名继续排)
SELECT sal,rank () over (ORDER BY sal DESC) FROM emp;