今天参加了一次面试,面试企业是我最喜欢的中国十大企业之一,不过,失败了,让自负自满的我一下子清醒过来了,对我来说,着实是一件好事。我虽然现在不会,但是我会努力学习,既然做了技术,就一定要做到最好。
下面是面试的4道主要的题,3道SQL的由于紧张关系,我都回答错了,坐车回来的路上仔细想了想,回来贴出结果来,做为教训保留。
1、查询表T(a,b,c,d),按c排序,取第21行到31行之间的记录:
这是一道老题了,哎,真不知道自己当时为什么不仔细想想再做。
select * from (select rownum rn,a.* from (select * from test order by c)a )where rn between 21 and 31
2、如果列值为空,则显示‘空’:
这题最可惜,我当时回答CASE,脑子都蒙了,后来坐车途中仔细想想,这么简单的题,我居然回答错,哎。。。愚蠢
SQL> select * from t;
A B
---------- ----------
1
1 a
2 a
3 a
2
3
已选择6行。
SQL> select a,decode(b,null,'Kong',b) from t;
A DECODE(B,N
---------- ----------
1 Kong
1 a
2 a
3 a
2 Kong
3 Kong
已选择6行。
SQL>
3、in和exists的区别:
我上网查了一下,得出以下结论:
in适合内外表都很大的情况,exists适合外表结果集很小的情况。
根据TOM的解释:in 是把外表和内表作hash join,也就是外表做HASH表。而exists是对外表作驱动表,再对子查询做NESTED LOOP。那么,IN适合子查询结果较小,有索引及统计信息。而exists适合外表记录较小,且子查询结果集较大,且有索引及统计信息。
这题我确实不会,需要认真从头学习SQL及SQL优化。
4、DATAGUARD在网络断开恢复后,缺失的日志是备机主动去拿还是主机传到备机?当RECOVER归档日志时,用户中断操作,是立即停止还是恢复完当前归档日志再停止?
这两道题我都没有确认过,因为现在DG的环境没有了,只剩下RAC,所以对于第一问,我回答的是主机传备机。后来我想想,应该是谁都不做动作,我记得当初我做DG后,主机在跑,备机停机,后来备机启动后报错,说缺失某个日志,我就得手动把主机的日志拷贝到备机上,才能继续应用,但我不确定答案,这需要以后做测试来判断。第二问,我回答立即停止,我当时的想法是,如果某个LOG有误操作,那么DBA发出停止命令应该目的很明确,不继续应用日志,但是我仍然不确定机制,需要做试验。
不会没关系,可以努力学习,要对自己有信心,继续努力,不要松懈
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16628454/viewspace-558151/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16628454/viewspace-558151/