oracle练习之 子查询
2017-03-31 16:56
260 查看
子查询
问题1 : 按工资进行排名,排名从1开始,工资相同则排名相同,(如果两人并列第一则没有第二名 从第三名开始继续排)
select e.* , (select count(*) from emp where sal>e.sal ) +1 pm from emp e order by pm ;
问题2: 求入职时间相同的员工
select * from emp e where (select count(*) from emp where hiredate=e.hiredate ) >=2 ;
问题3 : 查询每个部门工资最高的前两名 (题目解析 : 在一个部门内找员工,要求比该员工工资高的人的人数为0或1 )
select * from emp e where (select count(*) from emp where sal >e.sal and deptno=e.deptno) <2 ;
问题4 : 查询工资相同的员工的工资和姓名
select e.sal ,e.ename from emp e where (select count(*) from emp where sal=e.sal and ) >=2 ;
显示出和员工号7369部门相同的员工姓名,工资
列出至少有二个雇员的所有部门
Select deptno From emp group by deptno having count(*)>2;
列出薪金比”SMITH”多的所有雇员
Select ename From emp where sal>(select sal from emp where ename=’SMITH’);
列出入职日期早于其直接上级的所有雇员
Select * From emp e,(select empno,hiredate from emp) a where e.mgr=a.empno and e.hiredate
WARD
MARTIN
BLAKE
TURNER
JAMES
已选择6行。
显示出工资大于平均工资的员工姓名,工资
Select e.ename,e.sal From emp e,(select avg(sal) a from emp) s where e.sal>s.a;
显示出工资大于本部门平均工资的员工姓名,工资
Select e.ename,e.sal from emp e,(select deptno,avg(sal) av from emp group by deptno) a where e.deptno=a.deptno and sal>av;
显示员工”KING”所管理的员工姓名
Select e.ename from emp e,(select empno from emp where ename=’KING’) a where e.mgr=a.empno;
显示每位经理管理员工的最低工资,及最低工资者的姓名
Select e.ename,e.sal From emp e,(select min(sal) mins from emp group by mgr having mgr is not null) a where e.sal=a.mins;
显示比工资最高的员工参加工作时间晚的员工姓名,参加工作时间
Select ename,hiredate From emp where hiredate>(select hiredate from emp where sal=(select max(sal) from emp));
显示出平均工资最高的的部门平均工资及部门名称
Select d.dname,a.s From dept d,(select * from (select deptno,avg(sal) s from emp group by deptno order by avg(sal) des
ab3b
c) where rownum=1) a where d.deptno=a.deptno;
问题1 : 按工资进行排名,排名从1开始,工资相同则排名相同,(如果两人并列第一则没有第二名 从第三名开始继续排)
select e.* , (select count(*) from emp where sal>e.sal ) +1 pm from emp e order by pm ;
SQL> select e.* , (select count(*) from emp where sal>e.sal ) +1 pm from emp e order by pm ; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO PM ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- ---------- 7839 KING PRESIDENT 17-11月-81 5000 10 1 7902 FORD ANALYST 7566 03-12月-81 3000 20 2 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 2 7566 JONES MANAGER 7839 02-4月 -81 2975 20 4 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 5 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 6 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 8 7934 MILLER CLERK 7782 23-1月 -82 1300 10 9 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 10 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 10 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 12 7900 JAMES CLERK 7698 03-12月-81 950 30 13 7369 SMITH CLERK 7902 17-12月-80 800 20 14 已选择14行。
问题2: 求入职时间相同的员工
select * from emp e where (select count(*) from emp where hiredate=e.hiredate ) >=2 ;
SQL> select * from emp e where (select count(*) from emp where hiredate=e.hiredate ) >=2 ; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 03-12月-81 950 30 7902 FORD ANALYST 7566 03-12月-81 3000 20
问题3 : 查询每个部门工资最高的前两名 (题目解析 : 在一个部门内找员工,要求比该员工工资高的人的人数为0或1 )
select * from emp e where (select count(*) from emp where sal >e.sal and deptno=e.deptno) <2 ;
SQL> select * from emp e where (select count(*) from emp where sal >e.sal and e.deptno=deptno) <2 ; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7902 FORD ANALYST 7566 03-12月-81 3000 20 已选择6行。
问题4 : 查询工资相同的员工的工资和姓名
select e.sal ,e.ename from emp e where (select count(*) from emp where sal=e.sal and ) >=2 ;
SQL> select * from emp t1 where (select count(*) from emp where sal= t1.sal ) >=2; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7902 FORD ANALYST 7566 03-12月-81 3000 20
显示出和员工号7369部门相同的员工姓名,工资
列出至少有二个雇员的所有部门
Select deptno From emp group by deptno having count(*)>2;
列出薪金比”SMITH”多的所有雇员
Select ename From emp where sal>(select sal from emp where ename=’SMITH’);
列出入职日期早于其直接上级的所有雇员
Select * From emp e,(select empno,hiredate from emp) a where e.mgr=a.empno and e.hiredate
ENAME
ALLENWARD
MARTIN
BLAKE
TURNER
JAMES
已选择6行。
显示出工资大于平均工资的员工姓名,工资
Select e.ename,e.sal From emp e,(select avg(sal) a from emp) s where e.sal>s.a;
SQL> select e.ename ,e.sal from emp e where sal>(select avg(sal) from emp ); ENAME SAL ---------- ---------- JONES 2975 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 FORD 3000 已选择6行。 SQL> select e.ename ,e.sal from emp e, (select avg(sal ) a from emp ) s where e.sal > s.a; ENAME SAL ---------- ---------- JONES 2975 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 FORD 3000 已选择6行。
显示出工资大于本部门平均工资的员工姓名,工资
Select e.ename,e.sal from emp e,(select deptno,avg(sal) av from emp group by deptno) a where e.deptno=a.deptno and sal>av;
显示员工”KING”所管理的员工姓名
Select e.ename from emp e,(select empno from emp where ename=’KING’) a where e.mgr=a.empno;
显示每位经理管理员工的最低工资,及最低工资者的姓名
Select e.ename,e.sal From emp e,(select min(sal) mins from emp group by mgr having mgr is not null) a where e.sal=a.mins;
显示比工资最高的员工参加工作时间晚的员工姓名,参加工作时间
Select ename,hiredate From emp where hiredate>(select hiredate from emp where sal=(select max(sal) from emp));
显示出平均工资最高的的部门平均工资及部门名称
Select d.dname,a.s From dept d,(select * from (select deptno,avg(sal) s from emp group by deptno order by avg(sal) des
ab3b
c) where rownum=1) a where d.deptno=a.deptno;
相关文章推荐
- 【Oracle练习】⑥第7章 子查询
- Oracle sql语句练习
- [Oracle]高效的PL/SQL程序设计(二)--标量子查询
- [Oracle]高效的PL/SQL程序设计(二)--标量子查询
- oracle练习(mldn视频课程)三
- 一道Oracle子查询小练习
- oracle练习(mldn视频课程)四
- oracle pl/sql实例练习
- 我的Oracle 9i学习日志(9)--数据字典与动态性能视图及练习
- oracle练习(mldn视频)二
- oracle 9i期末考试复习的练习
- oracle 运动会练习
- Oracle实战练习(续二)
- Oracle实战练习(续四)
- oracle 公司 练习
- oracle 练习
- oracle pl/sql实例练习
- oracle 商店 练习
- Oracle 练习
- oracle pl/sql实例练习