设为首页 加入收藏

TOP

连接查询及分组查询强化练习
2015-11-21 02:07:01 来源: 作者: 【 】 浏览:1
Tags:连接 查询 分组 强化 练习

-- 求每个雇员的姓名,工资,工资等级

?

select a.ename, a.sal, b.grade from emp a, salgrade b
where a.sal between b.losal and b.hisal;

?

-- 求每个员工的姓名,部门名,部门号

?

select a.ename, b.dname, b.deptno
  from emp a, dept b
 where a.deptno = b.deptno;

?

-- 求每个人的名字和他的经理人的名字,用外连接把KING也取出来

?

select a.ename, b.ename mgrname from emp a, emp b
where a.mgr = b.empno;
\

?

?

select a.ename, b.ename mgrname from emp a, emp b
where a.mgr = b.empno(+);
\

?

-- 求公司中谁的薪水最高

?

select * from emp a where a.sal = (select max(sal) from emp);

?

-- 求薪水在部门的平均薪水之上的雇员姓名和及薪水

?

select a.ename, a.sal, a.deptno
  from emp a, (select avg(sal) avgsal, deptno from emp group by deptno) b
 where a.sal > b.avgsal
   and a.deptno = b.deptno;

-- 求每个部门中薪水最高的雇员编号,雇员姓名,部门编号,部门名

?

第一步,求每个部门的最高薪资

?

select max(sal) maxsal, deptno from emp group by deptno;

?

\

第二步,匹配每个部门的最高工资,查询最高工资员工姓名

select a.empno, a.ename, b.deptno, c.dname
  from emp a,
       (select max(sal) maxsal, deptno from emp group by deptno) b,
       dept c
 where a.deptno = b.deptno
   and b.deptno = c.deptno
   and a.sal = b.maxsal;
\

?

-- 求部门平均薪水的等级

?

select a.sal, b.grade
  from (select avg(sal) sal, deptno from emp group by deptno) a, salgrade b
 where a.sal between b.losal and b.hisal;

?

-- 求部门平均的薪水等级

后续补上sql


-- 雇员中有哪些人是经理人

?

select * from emp where job in ('MANAGER', 'PRESIDENT', 'ANALYST');

?

-- 求比普通员工的最高薪水还要高的经理人名称

?

select ename, sal
  from emp
 where sal > (select max(sal)
                from emp
               where job not in ('MANAGER', 'PRESIDENT', 'ANALYST'))
   and job in ('MANAGER', 'PRESIDENT', 'ANALYST');

-- 求薪水最高的前5名雇员

?

?

select c.ename, c.sal
  from (select b.ename, b.sal, rownum rn
          from (select a.ename, a.sal from emp a order by sal desc) b) c
 where c.rn <= 5;

-- 求薪水最高的6到10名的雇员姓名

?

?

select c.ename, c.sal
  from (select b.ename, b.sal, rownum rn
          from (select a.ename, a.sal from emp a order by sal desc) b) c
 where c.rn between 6 and 10;

?

-- 求最后入职的5名员工

select c.ename, c.hiredate
  from (select b.ename, b.hiredate, rownum rn
          from (select a.ename, a.hiredate from emp a order by hiredate desc) b) c
 where c.rn <= 5;

?

-- 求每个部门中薪水最高的前两名雇员

?

select * from emp e 
where ( select count(*) from emp where sal > e.sal 
and deptno = e.deptno ) < 2
order by e.deptno,e.sal desc;

?

-- 不用组函数求最高工资

?

select a.sal from (select * from emp order by sal desc) a where rownum = 1;
select e.sal from emp e where e.sal not in(select e2.sal from emp e1,emp e2 where e1.sal>e2.sal);
select distinct sal from emp
minus
select distinct e2.sal from emp e1,emp e2 where e1.sal>e2.sal;

?

-- 求平均薪水最高的部门名称

?

select a.dname, b.deptno
  from dept a,
       (select avg(sal) avgsal, deptno from emp group by deptno) b,
       (select max(a.avgsal) maxsal
          from (select avg(sal) avgsal, deptno from emp group by deptno) a) c
 where a.deptno = b.deptno
   and b.avgsal = c.maxsal;

?

以上题目均自己所做,如有错误,请及时指正,谢谢。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据库之Oracle的下载与安装【入.. 下一篇解决Oracle11g空表无法导出的问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: