综合题 在上题的“学生-选课-课程”数据库中,它们的主码分别是Sno,(Sno,Cno),Cno,并且其他属性都允许为空值(NULL)。用下面的SQL语句创建了两个视图: CREATE VIEW CS_S AS SELECT Sno,Sname,Sage FROM S WHERE Sdept=‘计算机系’; CREATE VIEW S_G( Sno,Gavg)AS SELECT Sno,avg(Grade) FROM SC GROUP BY Sno ; 若用下面的SQL语句对上述视图进行修改,它们能被成功执行吗?为什么? (1) UPDATE CS_S SET Sname ='王萍' WHERE Sno = 'S200500101'; (这里假定在表S中存在学号Sno = 'S200500101'的行) (2) INSERT INTO CS_S VALUES('S200502189', '杨青', 21 ) ; (这里假定在表S中不存在学号Sno = 'S200502189'的行) (3) UPDATE S_G SET Gavg = 85 WHERE Sno = 'S200501001'; (这里假定在表SC中存在学号Sno = 'S200501001'的行) 要求: 首先回答这三个SQL语句中哪个(些)能被成功执行,哪个(些)不能被成功执行,再进一步说明能被成功执行或不能被成功执行的理由。(10分)
【正确答案】第(1)和(2)两个SQL语句能被成功执行;第(3)个SQL语句不能被成功执行。 因为对视图的修改最终要转换为对基本表的修改。(2分) 对于第(1)个SQL语句能被成功执行的理由是:执行这个SQL语句将转换成执行如下的SQL语句: UPDATE S SET Sname ='王萍' WHERE Sdept=‘计算机系’AND Sno = 'S200500101'; (3分) 对于第(2)个SQL语句能被成功执行的理由是:执行这个SQL语句将转换成执行如下的SQL语句: INSERT INTO S VALUES('S200502189', '杨青' , NULL, 21,'计算机系') ; 或INSERT INTO S (Sno,Sname,Sage ,Sdept ) VALUES('S200502189', '杨青' ,21,'计算机系'); 转换后的这两个SQL语句,在本题意的假定下是能够被成功执行的。所以第(1)和(2)个SQL语句能被成功执行。(3分) 对于第(3)个SQL语句不能被成功执行的理由是:由于视图S_G中的一个行,是由表SC中若干行经过分组求平均值得到的,因此对视图S_G的更新就无法转换成对基本表SC的更新。所以第(3)个SQL语句不能被成功执行。(2分)
【答案解析】