数据库开发面试题-01

1、搜索出平均工资大于该组平均工资的员工姓名和工资(表来自oracle自带的scott中的emp和deptno表)

法一:简单sql

法二:使用游标写成函数

 

思路:

1整合为一张大表,里面有emp的全部信息+这个人所在组的平均工资(如下图)

2、再从这个表中找到sal>v_sal的人名

 

select e.ename,e.sal

from emp e,(       select avg(sal) v_sal,deptno

from emp

group by deptno) s

where e.deptno=s.deptno and e.sal > s.v_sal

/

 

 

 

select e1.ename, e1.sal
from emp e1
where e1.sal < (select avg(e2.sal)
                  
from emp e2
                  
where e2.deptno = e1.deptno)

 

 

 

??上面哪种效率更高

 

 

用游标写成函数

Create or replace  procedure pro_avg_sal

as

cursor c1 is select avg(sal) s,deptno from emp group by deptno;

--游标c1记录每个部门相应的平均工资

cursor c2 (v_deptno number) is select * from emp where deptno=v_deptno;

--游标c2记录emp一行的数据

begin

for i in c1 loop

dbms_output.put_line(chr(10)||i.deptno||'组的平均工资为:'||i.s);

for j in c2(i.deptno) loop

if ( j.sal > i.s ) then

如果某员工的工资高于其所在部门的平均工资,则打印出这名员工相应信息

dbms_output.put_line(j.ename||'  '||j.sal||'  '||'j.deptno');

end if;

end loop;

end loop;

end;

/

SQL> /

 

过程已创建。

 

SQL> exec pro_avg_sal

 

30组的平均工资为:1843.416666666666666666666666666666666667

ALLEN  1936  j.deptno

BLAKE  3135  j.deptno

 

20组的平均工资为:2513.5

JONES  3272.5  j.deptno

FORD  3300  j.deptno

 

10组的平均工资为:3256

KING  5500  j.deptno

 

PL/SQL 过程已成功完成。

 

再思考:这里不涉及updateDML操作,所以不用考虑锁的问题

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26171028/viewspace-709440/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26171028/viewspace-709440/

面试高级开发的期间整理的面试题目,记录我面试遇到过的数据库题目以及答案,比如说mvvc还有数据库调优,索引。 目录如下 数据库 数据库事务隔离级别; 事务的并发导致的问题; 数据库事务设置不同的隔离级别会导致的不同并发问题 当前读和快照读的意义; mvcc:多版本控制: 指的是一种提高并发的技术,其解决问题是什么; MVCC实现过程; mvcc三大组件; RC、RR级别下的InnoDB快照读有什么不同:17 mysql面试题01.vep 描述一下mysql的乐观锁和悲观锁,以及mysql锁的种类; mysql如何做分库分表的; mysql描述一下mysql主从复制的机制的原理;mysql主从复制主要有几种模式 在mysql开启Binlog(为了其他非事务引擎复制所以引入binlog,比如说主从)后,如何保证binlog和InnoDB redo日志的一致性呢; binlog和redo log和区别; mysql涉及到的log有哪些; 阿里要求尽量少用join,为什么; 索引 索引分类 索引的数据结构; b树和b+树的区别 索引失效的情况: 数据库优化 查询计划的结果中看哪些关键数据; mysql 如何调优; 索引是建的越多越好吗; 在表查询中,一律不要使用 * 作为查询的字段列表,原因是什么; 描述一下InnoDB和MyISAM的区别; 当前读和快照读的意义; 13 mvcc:多版本控制: 指的是一种提高并发的技术,其解决问题是什么; 14 MVCC实现过程; 14 mvcc三大组件; 15 RC、RR级别下的InnoDB快照读有什么不同:17 mysql面试题01.vep 17 描述一下mysql的乐观锁和悲观锁,以及mysql锁的种类; 17 mysql如何做分库分表的; 18 mysql描述一下mysql主从复制的机制的原理;mysql主从复制主要有几种模式 19 在mysql开启Binlog(为了其他非事务引擎复制所以引入binlog,比如说主从)后,如何保证binlog和InnoDB redo日志的一致性呢; 20 binlog和redo log和区别; 22 mysql涉及到的log有哪些; 23 阿里要求尽量少用join,为什么; 23 索引 24 索引分类 24 索引的数据结构; 24 b树和b+树的区别 26 索引失效的情况: 26 数据库优化 27 查询计划的结果中看哪些关键数据; 27 mysql 如何调优; 27 索引是建的越多越好吗; 29 在表查询中,一律不要使用 * 作为查询的字段列表,原因是什么; 29 描述一下InnoDB和MyISAM的区别; 29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值