分享

sql Exists 2个题目

 johnny_net 2019-04-05

第一题:

如下面的表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

如果想要得到下面的结果:(Id唯一,Date选最近的一次)

1   香蕉    水果    15     2011-7-3

2   青菜    蔬菜    19     2011-7-2


分析:

同一类水果或蔬菜,找出日期最新的那一条记录。采用正向思维无法解决问题,如用max找出日期最大的,但是只得到了日期,却没有得到记录。只能使用 双重否定 即为肯定 这种思路。

正确思路为:要找这么一条记录,他的日期不比 同类任何一条小。sql 应为 Select * from table t1 Where Exists(Select 1 from table t2 where t1.Class=t2.Class And t1.Date<t2.Date)

----------------------------

第二题

有三张表 学生表 Student(Sno,Sname) 课程表Course(Cno,Cname) 选课表SC(Sno,Cno)

要求找出:选修了全部课程的学生名称

分析:

这道题 也比较适用于双重否定。即找出 没有 任何一门课程没选的 学生,选课表中有学生的选课信息,课程表中有所有课程的信息,三个表关联。

思路为:找出这么一种学生,没有任一门课程没选。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

    )

)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多