设为首页 收藏本站
查看: 572|回复: 0

[经验分享] oracle经典题目

[复制链接]

尚未签到

发表于 2016-6-23 08:30:18 | 显示全部楼层 |阅读模式
  oracle经典题目
文章分类:数据库
 
--01 按以下格式显示下面的信息,条件是工资大于1500的。 
--  部门名称  姓名  工资 
select dname,ename,sal 
from dept,emp 
where dept.deptno = emp.deptno and sal > 1500 

--2 按以下格式显示下面信息,条件是此人工资在所有人中最高。 
--  部门  姓名  工资 
select dname,ename,sal 
from dept,emp 
where dept.deptno = emp.deptno 
  and emp.sal = (select max(sal) from emp) 

--3 按以下格式显示下面信息 
--  某人 为 某人 工作 
select e.ename || '为' || m.ename || '工作' as 描述 
from emp e,emp m 
where e.mgr = m.empno 

--4 为所有人长工资,标准是:10部门长10%;20部门长15%; 
--   30部门长20%其他部门长18%(要求用DECODE函数) 
select ename,deptno,sal,sal*(1+nvl(decode(deptno,10,0.1,20,0.15,30,0.2),0.18)) as newsal 
from emp 

--5 
--根据工作年限长工资,标准是:为公司工作了几个月就长几个百分点。 
select ename,hiredate,sal,sal*(1+round(months_between(sysdate,hiredate)/100.0)) as newsal 
from emp 

--6 查询出king所在部门的部门号\部门名称\部门人数 
--ex1 
select d.deptno,d.dname,count(*) 
from dept d,emp e,emp m 
where d.deptno = e.deptno 
  and e.deptno = m.deptno 
  and m.ename = 'KING' 
group by d.deptno,d.dname 

--ex2 
select d.deptno,d.dname,count(*) 
from dept d,emp e 
where d.deptno = e.deptno 
  and e.deptno = (select deptno from emp where ename = 'KING') 
group by d.deptno,d.dname 

--7 查询出king所在部门的工作年限最大的员工名字 
select ename,hiredate 
from emp 
where (deptno,hiredate) in (select deptno ,min(hiredate) 
                           from emp 
                           where deptno in (select deptno 
                                           from emp 
                                           where ename = 'KING') 
                           group by deptno) 

--8 查询出管理员工人数最多的人的名字和他管理的人的名字 
with m as 
( select empno,ename 
  from emp 
  where empno in ( select mgr 
                   from emp 
                   group by mgr 
                   having count(*)>= all ( select count(*) 
                                           from emp 
                                           group by mgr) 
                  ) 
)                                           
select ename,'manager' as type from m 
union 
select e.ename, 'emp' as type from m,emp e where e.mgr = m.empno 


--9 查询出工资成本最高的部门的部门号和部门名称 
select d.deptno,d.dname 
from dept d,emp e 
where d.deptno = e.deptno 
group by d.deptno,d.dname 
having sum(e.sal) >= all (select sum(sal)  
                          from emp 
                          group by deptno) 
                
--10 查询出工资不超过2500的人数最多的部门名称 
select d.deptno,d.dname 
from dept d,emp e 
where d.deptno = e.deptno 
    and e.sal <= 2500 
group by d.deptno,d.dname 
having count(*) >= all (select count(*) 
                        from emp 
                        where sal <= 2500 
                        group by deptno) 

--11 查询出没有下属员工的人的名字和他的职位 
select ename,job 
from emp 
where empno not in ( select distinct nvl(mgr,0) 
                     from emp) 

--12 查询出人数最多的那个部门的部门编号和部门名称 
select d.deptno,d.dname 
from dept d,emp e 
where d.deptno = e.deptno 
group by d.deptno,d.dname 
having count(*) >= all (select count(*) 
                        from emp 
                        group by deptno) 

--13 查询出没有员工的那个部门的部门编号和部门名称(要求用两种方法,其中一种要用集合运算) 
--ex1 
select deptno,dname 
from dept 
where deptno not in (select deptno from emp) 

--ex2 
select deptno,dname 
from dept 
where not exists 
   ( select deptno deptno 
     from emp 
     where dept.deptno = emp.deptno ) 

--ex3 
select deptno,dname 
from dept 
minus 
select d.deptno,d.dname 
from dept d ,emp e 
where d.deptno = e.deptno 

--14 查询出员工名字以A打头的人数最多的部门名称和员工名字 
select d.dname,e.ename 
from dept d,emp e 
where d.deptno = e.deptno 
  and e.deptno in ( select deptno 
                    from emp 
                    where ename like 'A%' 
                    group by deptno 
                    having count(*) >= all (select count(*) 
                                            from emp 
                                            where ename like 'A%' 
                                            group by deptno) 
                  ) 

--15 现在公司要给员工增加工龄工资,规则是:30*工作年限,请按以下格式显示下面结果:   
--       部门名称 员工姓名 原工资 增加额度 新工资 
select d.dname as 部门名称,e.ename as 员工姓名,e.sal as 原工资, 
       trunc(months_between(sysdate,hiredate)/12,0) * 30 as 增加额度, 
       e.sal + trunc(months_between(sysdate,hiredate)/12,0) * 30 as 新工资 
from dept d,emp e 
where d.deptno = e.deptno 

--16 针对DEPT和EMP表,查询出下面格式的结果并要求按部门编号和工资降序排列。 
--      部门名称  员工姓名  工资 
select d.dname as 部门名称,e.ename as 员工姓名, 
       e.sal as 工资 
from dept d,emp e 
where d.deptno = e.deptno 
order by d.deptno ,e.sal desc 

--17 针对DEPT和EMP表,查询出下面格式的结果。 
--      部门编号  部门名称  部门工资最小值  部门工资最大值  部门工资平均值  部门工资合计值 
select d.deptno as 部门编号,d.dname as 部门名称, 
       min(e.sal) as 部门工资最小值, 
       max(e.sal) as 部门工资最大值, 
       avg(e.sal) as 部门工资平均值, 
       sum(e.sal) as 部门工资合计值 
from dept d,emp e 
where d.deptno = e.deptno 
group by d.deptno,d.dname 

--18 针对DEPT和EMP表,查询出SMITH所在部门的部门名称、部门工资平均值。(要求使用子查询) 
select d.deptno,d.dname,avg(e.sal) 
from dept d,emp e 
where d.deptno = e.deptno 
  and e.deptno in (select deptno from emp where ename = 'SMITH') 
group by d.deptno,d.dname 
  

--19 针对DEPT和EMP表,查询出下面格式的结果。(要求使用外连接,没有员工的部门名也要显示。 
--    员工姓名如果是空值,要求用"不存在"代替;如果工资是空值,要求用0代替。) 
--     部门名称  员工姓名  工资 
select d.deptno,nvl(e.ename,'不存在'),nvl(e.sal,0) 
from dept d ,emp e 
where d.deptno = e.deptno(+) 

--20 针对DEPT和EMP表,查询出没有员工的部门号和部门名称(要求用两种方法) 
--ex1 
select deptno,dname 
from dept 
where deptno not in (select deptno from emp) 

--ex2 
select deptno,dname 
from dept 
where not exists 
   ( select deptno deptno 
     from emp 
     where dept.deptno = emp.deptno ) 

--ex3 
select deptno,dname 
from dept 
minus 
select d.deptno,d.dname 
from dept d ,emp e 
where d.deptno = e.deptno 

--21 查询出平均工资最高的部门编号、部门名称和平均工资。 
select d.deptno,d.dname,avg(e.sal) 
from dept d,emp e 
where d.deptno = e.deptno 
group by d.deptno,d.dname 
having avg(e.sal) >= all ( select avg(sal) from emp group by deptno)  

--22 查询出工资高于全体平均工资人数最多的部门编号、部门名称和员工姓名、工资。 
select d.deptno,d.dname,e.ename,e.sal 
from dept d,emp e 
where d.deptno = e.deptno 
  and d.deptno in ( select deptno 
                    from emp 
                where sal > (select avg(sal) from emp) 
                group by deptno 
                having count(*) >= all (  select count(*) 
                                             from emp e 
                                             where e.sal > (select avg(sal) from emp) 
                                         group by e.deptno 
                                       ) 
                   ) 





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-233891-1-1.html 上篇帖子: oracle权限全集 下篇帖子: oracle 日期大全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表