Oracle 经典面试题分享(2)

/*4.请用一个sql语句得出结果 从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确, 只是作为一个格式向大家请教。 table1 月份mon 部门dep 业绩yj ------------------------------- 一月份 01 10 一月份 02 10 一月份 03 5 二月份 02 8 二月份 04 9 三月份 03 8 table2 部门dep 部门名称dname -------------------------------- 国内业务一部 国内业务二部 国内业务三部 国际业务部 table3 (result) 部门dep 一月份 二月份 三月份 -------------------------------------- 10 null null 10 8 null null 5 8 null null 9 ------------------------------------------ create table yj01( month varchar2(10), deptno number(10), yj number(10) ) insert into yj01(month,deptno,yj) values('一月份',01,10); insert into yj01(month,deptno,yj) values('二月份',02,10); insert into yj01(month,deptno,yj) values('二月份',03,5); insert into yj01(month,deptno,yj) values('三月份',02,8); insert into yj01(month,deptno,yj) values('三月份',04,9); insert into yj01(month,deptno,yj) values('三月份',03,8); create table yjdept( deptno number(10), dname varchar2(20) ) insert into yjdept(deptno,dname) values(01,'国内业务一部'); insert into yjdept(deptno,dname) values(02,'国内业务二部'); insert into yjdept(deptno,dname) values(03,'国内业务三部'); insert into yjdept(deptno,dname) values(04,'国际业务部'); */ select * from yj01; select * from yjdept; --使用分组 select deptno, max(decode(month,'一月份',yj)) 一月份, max(decode(month,'二月份',yj)) 二月份, max(decode(month,'三月份',yj)) 三月份 from yj01 group by deptno order by deptno; --这道题给出了两张表,而用分组做,使用yj01表就能做出来了,所以这道题考察的应该是连表的知识 /*这两张表中有的月份有的部门业绩是空的,而用前几道题的做法,不匹配条件的值会被过滤掉, 例如month=一月份的只有1部门,形成的表里deptno只有1和二月份、三月份形成的表中的deptno无法匹配 而yjdept表中包含了所有部门编号deptno,这时就可以用到外连接的特性 (在满足一张表的内容都显示的基础上,连接另外一张表,如果连接匹配则正常显示,连接不匹配,另外一张表补null) */ select t1.deptno, t1.yj 一月份, t2.yj 二月份, t3.yj 三月份 from (select y2.deptno,y1.yj from (select yj, deptno from yj01 where month='一月份') y1 right join yjdept y2 on y1.deptno=y2.deptno)t1 join (select y2.deptno,y1.yj from (select yj, deptno from yj01 where month='二月份') y1 right join yjdept y2 on y1.deptno=y2.deptno)t2 on t1.deptno=t2.deptno join (select y2.deptno,y1.yj from (select yj, deptno from yj01 where month='三月份') y1 right join yjdept y2 on y1.deptno=y2.deptno)t3 on t1.deptno=t3.deptno order by t1.deptno;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/676b9faf2d53c508a4a533102faa5ea5.html