6.查询选修课程超过5门的学员学号和所属单位 SELECT SN,SD FROM S WHERE [Sno] IN(
SELECT [Sno] FROM SC GROUP BY [Sno]
HAVING COUNT(DISTINCT [Cno])>5)
四、问题描述:已知关系模式:
S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,TEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,TEACHER 为任课教师
SC(SNO,CNO,GRADE) 选课关系。GRADE 为成绩 要求实现如下5个处理:
1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩 3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
4. 列出“1”号课成绩比“04010002”号同学该门课成绩高的所有学生的学号
5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
参考答案:
1.找出没有选修过“李明”老师讲授课程的所有学生姓名
select sname from s where not exists (select * from c,sc where c.cno=sc.cno AND c.teacher=N'李明' AND s.sno=sc.sno) 参考:select sno,sname from s
where sno not in
(select sno from sc,c where c.cno=sc.cno AND c.teacher=N'liu')
2.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩 SELECT S.SNO,SNAME,AVG_GRADE=AVG(SC.GRADE) FROM S,SC
WHERE GRADE<60 and s.sno=sc.sno GROUP BY s.SNO,s.sname
HAVING COUNT(DISTINCT CNO)>=2 或
SELECT S.SNO,S.SNAME,AVG_GRADE=AVG(SC.GRADE) FROM S,SC,( SELECT SNO FROM SC
WHERE GRADE<60 GROUP BY SNO
HAVING COUNT(DISTINCT CNO)>=2
)A WHERE S.SNO=A.SNO AND SC.SNO=A.SNO GROUP BY S.SNO,S.SNAME
3.列出既学过“1”号课程,又学过“2”号课程的所有学生姓名 SELECT S.SNO,S.SNAME FROM S,sc
where S.SNO=SC.SNO and cno='1' and s.sno in (select S.sno from S,sc
where S.SNO=SC.SNO and cno='2') 或
SELECT S.SNO,S.SNAME FROM S,(
SELECT SC.SNO FROM SC,C
WHERE SC.CNO=C.CNO AND C.cno IN('1','2') GROUP BY SNO
HAVING COUNT(DISTINCT c.CNO)=2 )SC WHERE S.SNO=SC.SNO
4。列出“1”号课成绩比“04010002”号同学该门课成绩高的所有学生的学号 SELECT S.SNO,S.SNAME FROM S,SC
WHERE SC.CNO='1'and SC.sNO=S.sNO AND grade>(select grade from s,sc
where s.SNO='04010002'and SC.CNO='1'and SC.sNO=S.sNO)
5。列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
SELECT SC1.SNO,[1号课成绩]=SC1.GRADE,[2号课成绩]=SC2.GRADE FROM SC SC1,SC SC2 WHERE SC1.CNO='1' AND SC2.CNO='2'
AND SC1.SNO=SC2.SNO
AND SC1.GRADE>SC2.GRADE
四、通配符理解题(请说出下列通配符的含义)
1.LIKE 'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。 2.LIKE '%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
3.LIKE '%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
4.LIKE '_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。 5.LIKE '[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
6.LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如 MacFeather)。
7.LIKE '5[%]' -- 5%
8.LIKE '5%' -- 5 后跟 0 个或更多字符的字符串 9.LIKE '[_]n' -- _n
10.LIKE '_n' --an,in, on (and so on) 11.LIKE '[a-cdf]' -- a, b, c, d, or f 12.LIKE '[-acdf]' -- -, a, c, d, or f 13.LIKE '[ [ ]' -- [ 14.LIKE ']' -- ]