當需要對查詢到的結果進行比較復雜的處理的時候,可以借助聯合查詢、子查詢等得到期望的結果。下面列舉一個具體的經典試題,希望對讀者有所啟發。
表 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 ;
面對類似的面試題目或者問題,雖然涉及的知識點(子查詢、連接查詢等)不是很多,但是因為有一些數據的轉化和查詢的嵌套,可能會造成一些心理素質較差的讀者手足無措。因此,面對類似的復雜問題,要學會使用“拆分法”進行分解,一步步地解決問題。