第一題: 如下面的表table: Id Name Class Count Date 1 蘋果 水果 10 2011-7-1 1 桔子 水果 20 2011-7-2 1 香蕉 水果 15 2011-7-3 2 白菜 蔬菜 12 2011-7-1 2 青菜 蔬菜 19 2011-7-2 如果想要得到下面的結(jié)果:(Id唯一,Date選最近的一次) 1 香蕉 水果 15 2011-7-3 2 青菜 蔬菜 19 2011-7-2 分析: 同一類水果或蔬菜,找出日期最新的那一條記錄。采用正向思維無法解決問題,如用max找出日期最大的,但是只得到了日期,卻沒有得到記錄。只能使用 雙重否定 即為肯定 這種思路。 正確思路為:要找這么一條記錄,他的日期不比 同類 中 任何一條小。sql 應(yīng)為 Select * from table t1 Where Exists(Select 1 from table t2 where t1.Class=t2.Class And t1.Date<t2.Date) ---------------------------- 第二題 有三張表 學(xué)生表 Student(Sno,Sname) 課程表Course(Cno,Cname) 選課表SC(Sno,Cno) 要求找出:選修了全部課程的學(xué)生名稱 分析: 這道題 也比較適用于雙重否定。即找出 沒有 任何一門課程沒選的 學(xué)生,選課表中有學(xué)生的選課信息,課程表中有所有課程的信息,三個(gè)表關(guān)聯(lián)。 思路為:找出這么一種學(xué)生,沒有任一門課程沒選。sql為 Select * from Student s Where not Exists( Select 1 from Course c Where not Exists( Select 1 from SC Where Sno=s.Sno And Cno=c.Cno ) ) |
|