资源描述
[例32] 查询选修了3门以上课程的学生学号。
[例33]查询每个学生及其选修课程的情况
[例34] 对[例33]用自然连接完成。(结果无重复列)
[例35]查询每一门课的间接先修课(即先修课的先修课)
[例 36] 改写[例33]外连接()
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT JOIN SC ON (Student.Sno=SC.Sno);
[例37]查询选修2号课程且成绩在90分以上的所有学生
[例38]查询每个学生的学号、姓名、选修的课程名及成绩
[例39]查询与“刘晨”在同一个系学习的学生。
此查询要求可以分步来完成
① 定“刘晨”所在系名
②查找所有在IS系学习的学生。
将第一步查询嵌入到第二步查询的条件中
[例40]查询选修了课程名为“信息系统”的学生学号和姓名
提示:
①首先在Course关系中找出“信息系统”的课程号,为3号
②然后在SC关系中找出选修了3号课程的学生学号
③最后在Student关系中取出Sno和Sname
[例41]找出每个学生超过他选修课程平均成绩的课程号。
[例42] 查询其他系中比计算机科学某一学生年龄小的学生姓名和年龄
方法一:用any
方法二:用聚集函数MIN
[例43] 查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄。
方法一:用ALL谓词
[例44]查询所有选修了1号课程的学生姓名。
思路分析:本查询涉及Student和SC关系在Student中依次取每个元组的Sno值,用此值去检查SC关系
若SC中存在这样的元组,其Sno值等于此Student.Sno值,并且其Cno= '1',则取此Student.Sname送入结果关系用嵌套查询
[例45]查询没有选修1号课程的学生姓名。
[例46] 查询选修了全部课程的学生姓名。
[例47]查询至少选修了学生200215122选修的全部课程的学生号码。
解题思路:
n 用逻辑蕴函表达:查询学号为x的学生,对所有的课程y,只要200215122学生选修了课程y,则x也选修了y。
n 形式化表示:
用P表示谓词“学生200215122选修了课程y”
用q表示谓词“学生x选修了课程y”
则上述查询为: ("y) p® q
[例48] 查询计算机科学系的学生及年龄不大于19岁的学生。
方法一:UNION
UNION:将多个查询结果合并起来时,系统自动去掉重复元组。
UNION ALL:将多个查询结果合并起来时,保留重复元组
方法二:or
[例49] 查询选修了课程1或者选修了课程2的学生。
[例50] 查询计算机科学系的学生与年龄不大于19岁的学生的交集(INTERSECT)
[例51]查询既选修了课程1又选修了课程2的学生
[例52]查询计算机科学系的学生与年龄不大于19岁的学生的差集。
展开阅读全文