求出选修了所有课程的学生姓名

xiaoxiao2021-03-01  39

求出选修了所有课程的学生姓名

学生表 S(SNO int pk,SN varchar(8)) --SNO为学号 ,SN为学生姓名。课程表 C(CNO int pk,CN varchar(50)) --CNO为课程号,CN为课程名选修表 SC(SNO int pk,CNO int pk,SCORE number(7,2),fk(SNO,CNO) ) --SCORE为成绩。

--以下语句为求出选修了所有课程的学生姓名.SELECT SNFROM sWHERE (NOT EXISTS (SELECT * FROM c WHERE NOT EXISTS (SELECT * FROM sc WHERE SNO = S.SNO AND CNO = C.CNO)))

解释:没有任何一门课程不再该生所选的课程中。

小朋友不会原因是不知道字段的访问规则,join 的查询中后面的表可以用前面表中的字段作为条件。在嵌套查询中子查询可以使用父查询表中的字段作为条件。

类似的题型还有:

1、求至少选修了学生学号为S003所选修的所有课程的学生姓名和学号。

SELECT distinct SN,SNo <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

FROM SC SC2

WHERE (NOT EXISTS

(SELECT CNO

FROM SC SC1

WHERE SNO='S003' and CNO not in

(select Cno from Sc where SC2.SNO=Sc.SNo)))

解释:

没有任何一门学号为S003学生所选修的课程编号不在该生所选的课程的编号中中。

注意此处该生与S003不是同一个意思。该生泛指符合条件的学生。

转载请注明原文地址: https://www.6miu.com/read-3849965.html

最新回复(0)