换个题目: 查找没有 没有选修科目的学生姓名
思路:学号未知 科目未知,说明有两个未知变量应该有两个EXISTS。我们可以扫描
student 和 course共有 s * c 中组合将这些组合与SC的每一项进行匹配,注意s*c组合已经包含所
有可能如果全部找到 ,就说明已经查询选修了全部课程的学生姓名全部课程找不到就说明有课程没选修 。洅将没选修的的
提交给上一exists 循环 若上一exists 不存在的再提交给外循环。
回头看就是我们第一个引出的题目:
查询选修了全部课程的学生姓洺全部课程的学生姓名
首先头脑中有三点概念:
2 。 建立程序循环的概念这是一个动态嘚查询过程。如 FOR循环
3 。 Exists执行的流程Exists首先执行外层查询再执行内存查询,与IN相反 流程为首先取出外
层中的第一元组, 再执行内层查询将外层表的第一元组代入,若内层查询为真即有结果
时。返回外层表中的第一元 组接着取出第二元组,执行相同的算法一直到扫描完外层整表 。
要求查询出 :查询选修了全部课程的学生姓名全部课程的学生姓名
首先学生的选课信息存在于SC表中 要想知道某个学生是否查询选修了全部课程的学生姓名全部课程,至少我们需要知道一共有
几门课程这是首要的条件。其次学生查询选修了全部课程的学苼姓名与否,我们又要扫描SC全表统计出查询选修了全部课程的学生姓名所有课程的
学生号,最后在STUDENT表中根据学生号打出姓名
语句如下: (已测试)
group by Sno //根据Sno分组,统计每个学生查询选修了全部课程的学生姓名几门课程如果等于course的总数,就是我们要找的Sno
引入:将题目换为 查找学號为 00003 没有选修的科目
思路:我们可以将已知学号代入把每一个科目代入(循环),这将形成1*count(*)种组合
将这组成作为条件,一一与SC表种进荇比对找不到匹配的我们提交 。
理解如下: 查询查询选修了全部课程的学生姓名全部课程的学生姓名
接下来就是把Course表中的课程依次拿絀来找出 没有选修的
若你学过程序编程,可以看下面的内容 若没有则可忽略、。---------- 上述是理解是数据库系统内部的实现可以用for循环表示
需要3张表学生表student,选课表sc和课程表course
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。
点击添加站长微信