2022年数据库作业 3.pdf
刘文玲 41304289 一、查询学生 -课程数据库1.查询目前年龄大于19 岁的学生信息:学号、姓名和出生年份。SELECT SNO,NAME,2015-AGE FROM Student WHERE AGE19 2.查询每门课程的最高分,要求得到的信息包括课程号和分数。SELECT CNO,MAX(GRADE) FROM SC GROUP BY CNO 3.统计只有 2 名以下 (含 2 名)学生选修的课程情况,统计结果包括课程号、课程名和选修人数,并按选课人数降序排列。SELECT Course.CNO,CNAME,COUNT(SNO) FROM SC,Course WHERE SC.CNO=Course.CNO GROUP BY(Course.CNO,Course.CNAME) HAVING COUNT(SNO)=2 ORDER BY COUNT(SC.SNO) DESC 4.查询选修了信息系统和数据库的学生的名字。(2 种方法)SELECT DISTINCT NAME FROM Student,Course,SC WHERE Student.SNO=SC.SNO AND SC.CNO=Course.CNO AND CNAME IN( 数据库 ,信息系统 ) SELECT NAME FROM Student WHERE SNO IN( 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - SELECT SNO FROM SC WHERE CNO IN( SELECT CNO FROM Course WHERE CNAME IN(数据库 ,信息系统 ) 5.查询每门课程的间接先修课程(即先修课程的先修课),输出课程和间接先修课程的课程号及学分。SELECT S1.CNO,S1.CREDIT,S2.CPNO FROM Course S1,Course S2 WHERE S1.CNO=S2.CNO; SELECT S2.CPNO,S2.CREDIT FROM Course S1,Course S2 WHERE S2.CPNO=S1.CNO 二、P130:5 (1),(4),(6)(2 种方法 ),(7) ,(9),(10),(11) (1)SELECT SNAME,CITY FROM S (4)SELECT P.PNAME,QTY FROM SPJ,P WHERE SPJ.PNO=P.PNO AND SPJ.JNO= J2 (6) SELECT JNAME FROM S,SPJ,J WHERE S.NO=SPJ.SNO AND S.CITY= 上海 AND SPJ.JNO=P.JNO 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - SELECT JNAME FROM SPJ,J WHERE SPJ.JNO=P.JNO AND SNO IN (SELECT SNO FROM S WHERE CITY= 上海 ) (7)SELECT JNO FROM S,SPJ WHERE S.NO=SPJ.NO AND S.CITY NOT IN( 天津 ) (9)UPDATE SPJ SET SNO= S3 WHERE JNO= J4 AND PNO= P6 AND SNO= S5(10)DELETE FROM S WHERE SNO= S2 ; DELETE FROM SPJ WHERE SNO= S2 (11)INSERT INTO SPJ VALUES( S2 ,J6 , P4, 200 ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - 三、预习1.视图(1)视图与基表的区别与联系答:区别:视图是一个虚表, 数据库中只存放视图的定义,而不存放视图对应的数据,这些数据存放在对应的基本表中;而基本表真实存在,数据存在其中。联系:视图对应的数据存在基本表中,因此视图查询出的数据随基本表中数据变动变动(2)创建信息系学生的视图。CREATE VIEW IS1_Student AS SELECT SNO,NAME,AGE FROM Student WHERE DEPT=IS (3)将学生的学号、姓名及平均成绩定义为一个视图CREATE VIEW StuV1(SNO,NAME,GAVG) AS SELECT Student.SNO,NAME,AVG(GRADE) FROM Student,SC WHERE Student.SNO=SC.SNO GROUP BY (Student.SNO,NAME) (4)视图可以查询吗?与基表的查询方法相同吗答:视图可以查询,与基本表的查询方式一样(5)查询平均成绩在90 分以下的学生姓名和平均成绩。分别从基表和视图查询。基本表:SELECT NAME,AVG(GRADE) FROM Student,SC WHERE Student.SNO=SC.SNO GROUP BY NAME HAVING AVG(GRADE)90 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 视图 SELECT NAME,GAVG FROM StuV1 WHERE GAVG90 (6)视图可以更新吗?与基表的查询方法相同吗?有什么限制。答:视图可以更新,更新方式与基本表的一样,但并不是所有的视图都是可更新的,一般只允许对行列子集视图进行更新。(7)通过更新视图将信息系的学生张立的名字更改为张国立。UPDATE IS1_Student SET NAME= 张国立 WHERE NAME= 张立 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -