oracle查询练习2

1 显示所有雇员名、雇员工资及所在部门名

--select ename 雇员名,sal 雇员工资,dname 部门名 from emp,dept where emp.deptno=dept.deptno;
select ename 雇员名,sal 雇员工资,dname 部门名 from emp,dept where emp.deptno=dept.deptno;

2 显示部门代码为20的部门名,以及该部门的所有雇员名、雇员工资及岗位

select dname 部门名,ename 雇员名,sal 雇员工资, job 岗位 from emp,dept where emp.deptno=dept.deptno and emp.deptno=20;

3   显示所有雇员名、雇员工资及工资级别

 select ename 雇员名,sal 雇员工资,grade 工资级别 from emp,salgrade where sal>=losal and sal<=hisal;

4   显示雇员"SCOTT"的管理者名

 select ename from emp where empno=(select mgr from emp where ename='SCOTT');

5   显示获得补助的所有雇员名、补助额以及所在部门名

select ename 雇员名,comm 补助额,dname 部门名 from emp,dept where emp.deptno=dept.deptno and comm is not null;

6   查询EMP表和SALGRADE表,显示部门代码为20的雇员名、工资及其工资级别

 select ename,sal,grade from emp,salgrade where deptno='20' and sal>=losal and sal<=hisal;

7   显示部门代码为10的所有雇员名、部门名,以及其他部门名

select ename,dname from emp right join dept on emp.deptno=10 and emp.deptno=dept.deptno;

8   显示部门代码为10的所有雇员名、部门名,以及其他雇员名

select ename,dname from emp left join dept on emp.deptno=10 and emp.deptno=dept.deptno;

9   显示部门代码为10的所有雇员名、部门名,以及其他部门名和雇员名

select ename,dname from emp full join dept on emp.deptno=10 and emp.deptno=dept.deptno;

10 显示"BLAKE"同部门的所有雇员,但不显示"BLAKE"

select * from emp where deptno=(select deptno from emp where ename='BLAKE') and ename<>'BLAKE';
select e.ename,e.deptno from emp e,emp d where e.deptno=d.DEPTNO and e.ename<>'BLAKE' and d.ename='BLAKE';

11 按以下格式显示下面的信息,条件是工资大于1500的。

--  部门名称  姓名  工资
select dname,ename,sal from emp,dept where emp.deptno=dept.deptno and sal>1500;

12 按以下格式显示下面信息,条件是此人工资在所有人中最高。

--  部门  姓名  工资
select dname,ename,sal from emp,dept where sal=(select max(sal) from emp) and emp.deptno=dept.deptno;

13 按以下格式显示下面信息

--  某人 为 某人 工作
select e.ename||' 为 '||b.ename||' 工作' 描述 from emp e,emp b where e.mgr=b.empno;

14 为所有人长工资,标准是:10部门长10%;20部门长15%;

--   30部门长20%其他部门长18%(要求用DECODE函数)
select ename,job,sal,sal*decode(deptno,10,1.1,20,1.15,30,1.2,1.18) 增长后的工资,deptno from emp;

!15 根据工作年限长工资,标准是:为公司工作了几个月就长几个百分点。

select ename,job,hiredate,sal,sal*(1+round(MONTHS_BETWEEN(sysdate,hiredate)/100.0)) 增长后的工资 from emp;
--select sal*(1+round(MONTHS_BETWEEN(sysdate,hiredate)/100.0)) 增长后的工资 from emp;

16 查询出king所在部门的部门号\部门名称\部门人数

select emp.deptno 部门名称,dname 部门名,count(1) 人数 from emp,dept where emp.deptno=dept.deptno
 and emp.deptno=(select deptno from emp where ename='KING') group by emp.deptno,dname;
--select count(1) from emp where deptno=(select deptno from emp where ename='KING');

17 查询出king所在部门的工作年限最大的员工名字

select ename from emp where hiredate=(select min(hiredate)from emp);

!18 查询出管理员工人数最多的人的名字和他管理的人的名字

--select max(pt) from (select b.ename name,count(1) pt from emp a,emp b where a.mgr=b.empno group by b.ename) lk;
select b.ename,e.ename from emp e,emp b where e.mgr=b.empno and 
b.empno in(select mgr from emp group by mgr 
having count(1)>=all(select count(1)from emp group by mgr));

19 查询出工资成本最高的部门的部门号和部门名称

--select dept.deptno,sum(sal) from emp,dept where emp.deptno=dept.deptno group by dept.deptno;
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);

20 查询出工资不超过2500的人数最多的部门名称

select dname,a.* from dept d,(select deptno,count(1) num from emp where sal<2500 group by deptno) a where a.deptno=d.deptno and deptno=(select deptno from a having max(num));
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);

21 查询出没有下属员工的人的名字和他的职位

select ename,job from emp where empno not in(select distinct nvl(mgr,0) from emp);
select ename,job from emp where empno not in(select mgr from emp where mgr is not null);

22 查询出人数最多的那个部门的部门编号和部门名称

select d.deptno,d.dname from dept d,emp e where d.deptno=e.deptno 
group by d.deptno,d.dname having sum(e.deptno)>= all(select sum(deptno) from emp group by deptno);

23 查询出没有员工的那个部门的部门编号和部门名称(要求用两种方法,其中一种要用集合运算)

select d.deptno,d.dname from dept d,emp e where d.deptno=e.deptno(+) 
and d.deptno not in(select distinct deptno from emp);
select d.deptno,d.dname from dept d,emp e where d.deptno=e.deptno(+) 
minus select d.deptno,d.dname from dept d,emp e where d.deptno=e.deptno;

24 查询出员工名字以A打头的人数最多的部门名称和员工名字

select d.dname,e.ename from emp e,dept d where e.deptno=d.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));

25 现在公司要给员工增加工龄工资,规则是:30*工作年限,请按以下格式显示下面结果:  

--       部门名称 员工姓名 原工资 增加额度 新工资
select dname 部门名称,ename 员工姓名,sal 原工资,30*round(MONTHS_BETWEEN(sysdate,hiredate)/12) 增加额度,
sal+30*round(MONTHS_BETWEEN(sysdate,hiredate)/12) 新工资 from emp e,dept d;

26 针对DEPT和EMP表,查询出下面格式的结果并要求按部门编号和工资降序排列。

--      部门名称  员工姓名  工资
select dname 部门名称,ename 员工姓名,sal 工资 from emp e,dept d where e.deptno=d.deptno order by e.deptno desc,sal desc;

27 针对DEPT和EMP表,查询出下面格式的结果。

--      部门编号  部门名称  部门工资最小值  部门工资最大值  部门工资平均值  部门工资合计值
select d.deptno 部门编号,dname 部门名称,min(sal)部门工资最小值,max(sal) 部门工资最大值,
avg(sal) 部门工资平均值 from emp e,dept d where e.deptno=d.deptno group by d.deptno,dname;

28 针对DEPT和EMP表,查询出SMITH所在部门的部门名称、部门工资平均值。(要求使用子查询)

select d.deptno,dname,avg(sal) 部门平均工资 from dept d,emp e 
where e.deptno=(select deptno from emp where ename='SMITH') and e.deptno=d.deptno group by d.deptno,dname;

29 针对DEPT和EMP表,查询出下面格式的结果。(要求使用外连接,没有员工的部门名也要显示。

--    员工姓名如果是空值,要求用"不存在"代替;如果工资是空值,要求用0代替。)
--     部门名称  员工姓名  工资
select dname 部门名称,nvl(ename,'不存在') 员工姓名,nvl(sal,0) 工资 from emp e,dept d where e.deptno(+)=d.deptno;

30 针对DEPT和EMP表,查询出没有员工的部门号和部门名称(要求用两种方法)

select d.deptno 部门号,dname 部门名称 from emp e,dept d where e.deptno(+)=d.deptno
MINUS
select d.deptno 部门号,dname 部门名称 from emp e,dept d where e.deptno=d.deptno;
select d.deptno 部门号,dname 部门名称 from emp e,dept d where e.deptno(+)=d.deptno and d.deptno not in(select distinct deptno from emp);

31 查询出平均工资最高的部门编号、部门名称和平均工资。

select e.deptno,dname,avg(sal) from emp e,dept d where e.deptno=d.deptno 
group by e.deptno,dname having avg(sal)>=all(select avg(sal) from emp group by deptno);

32 查询出工资高于全体平均工资人数最多的部门编号、部门名称和员工姓名、工资。

select e.deptno,dname,ename,sal from emp e,dept d where e.deptno=d.deptno 
and e.deptno in(select deptno from emp group by deptno having avg(sal)>(select avg(sal) from emp));

Oracle查询练习考试是一种用于测试学生对Oracle数据库查询语言的掌握程度的考试。该考试通常包含一系列的问题和练习题,要求学生使用SQL语言来查询数据库中的数据。 在考试中,学生需要根据提供的数据库模式和题目的要求,编写查询语句来获取相应的数据结果。这些查询语句可能包括基本的SELECT语句,也可能涉及到联接查询、聚合函数、子查询等复杂操作。 考试的题目通常会设计一些真实场景的查询需求,学生需要通过理解问题背景和数据模式,分析题目要求,并运用自己对Oracle查询语言的知识,来编写相应的查询语句。 完成这样的考试对学生来说具有一定的挑战性和难度。学生需要熟悉Oracle数据库查询语言的基本语法和函数,同时还需要理解数据库的结构和关系模式,以及如何运用查询语言来处理和获取数据。 通过Oracle查询练习考试,学生能够加深对Oracle数据库查询语言的理解和实践,提高自己的数据库查询能力和技巧。同时,这样的考试也有助于学生发现自己在查询过程中存在的问题和不足,从而提升自己的学习和进步空间。 总之,通过Oracle查询练习考试,学生可以提高自己在Oracle数据库查询方面的能力和熟练度,为将来的工作和学习打下坚实的基础。同时,这样的考试也能够通过实践和挑战,完善和提升学生的知识,促进他们在数据库领域的专业发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值