# 问题1 SELECT*FROM StudentInfo WHERE SDepart='自动化'AND SName like'王%' ORDERBY SName DESC # 问题2 SELECT C.CNo,C.CName,C.Credit,SC.Grade FROM CourseInfo C,StudyCourseRec SC WHERE SC.SNo="006021" AND SC.CNo=C.CNo ORDERBY C.CNo # 问题3 SELECT S.SNo,S.SName,S.SSex,S.SDepart,SC.Grade FROM StudentInfo S,StudyCourseRec SC WHERE SC.CNo="996A11" AND SC.SNo=S.SNo AND SC.Grade <60 ORDERBY S.SNo # 问题4 SELECTcount(SC.Grade),avg(SC.Grade),max(SC.Grade),min(SC.Grade) FROM StudyCourseRec SC,CourseInfo C WHERE C.CName="现代控制理论" AND SC.CNo = C.CNo # 问题5 SELECT C.CNo,C.CName,count(SC.Grade),avg(SC.Grade),max(SC.Grade),min(SC.Grade) FROM StudyCourseRec SC,CourseInfo C,StudentInfo S WHERE C.CNo = SC.CNo AND S.SNo = SC.SNo AND S.SDepart="自动化" GROUPBY C.CNo # 问题6 INSERTINTO CourseInfo (CNo,CName,Credit) VALUES ("216B01","人工智能的伦理问题",2); # 问题7 UPDATE CourseInfo SET CPNo = "206B04" WHERE CNo = "216B01" # 问题8 DELETEFROM StudyCourseRec WHERE CNo = "06C032" AND Grade ISNULL
多表查询 & 等值联接
嵌套查询
IN嵌套
EXISTS嵌套
示例:查询所有自动化学院的学生都修读的课程,按课程号顺序,列出课程号、课程名称
本问题其实可以分解为如下问题:
查询这样的课程,不存在学生不修读这个课程
1 2 3 4 5 6 7 8 9 10 11 12
SELECT CNo,CName FROM CourseInfo C WHERENOTEXISTS( SELECT*FROM StudentInfo S WHERE S.SDepart = "自动化" ANDNOTEXISTS( SELECT*FROM StudyCourseRec SC WHERE SC.CNo = C.CNo AND SC.SNo = S.SNo ) ) ORDERBY C.CNo
分组查询
示例:查询所有自动化学院的学生都修读的课程,按课程号顺序,列出课程号、课程名称
与之前提到的其实是同一个问题,他还可以分解为如下问题:
查询这样的课程,该课程有自动化学生修读,并且修读人数等于自动化学生人数
1 2 3 4 5 6 7 8 9
SELECT C.CNo,C.CName FROM CourseInfo C,StudentInfo S,StudycourseRec SC WHERE C.CNo = SC.CNo AND S.SNo = SC.SNo AND S.SDepart = "自动化" GROUPBY C.CNo HAVINGcount(C.CNo) = ( SELECTcount(*) FROM StudentInfo S WHERE S.SDepart = "自动化") ORDERBY C.CNo