当需要对查询到的结果进行比较复杂的处理的时候,可以借助联合查询、子查询等得到期望的结果。下面列举一个具体的经典试题,希望对读者有所启发。
表 NBA 记录了TEAM
夺冠球队的名称及年份:
TEAM YEAR湖人 2010
这道题目可以分解为两步:
第一步:找出所有连续获得冠军的球队
第二
步
:计算
连续获得冠军的球队的起止年份
-- Create table create table NBA ( team NUMBER, year NUMBER ) tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );为了方便起见,这里仅用数字代替球队,随意插入一些测试数据:
活塞 1990
公牛 1991
公牛 1992
公牛 1993
火箭 1994
select n2.team,n2.year from (select * from nba) n1 join (select * from nba) n2 on n1.team=n2.team where n1.year=n2.year+1执行结果为:
max(year)+1:
select max(nn.team) team,min(nn.year) BeginYear,max(nn.year)+1 EndYear from (select n2.team,n2.year from (select * from nba) n1 join (select * from nba) n2 on n1.team=n2.team where n1.year=n2.year+1) nn group by (nn.year-rownum) order by BeginYear ;
面对类似的面试题目或者问题,虽然涉及的知识点(子查询、连接查询等)不是很多,但是因为有一些数据的转化和查询的嵌套,可能会造成一些心理素质较差的读者手足无措。因此,面对类似的复杂问题,要学会使用“拆分法”进行分解,一步步地解决问题。
祝你成功!
原文地址:http://blog.csdn.net/sinat_26342009/article/details/45674121