结构推理 根据以下给出三个基本表Student、Course、SC和各小题要求,写出对应的SQL语句。其中:Student(学生表)的字段按顺序为学号、姓名、性别、年龄、所属院系。 Course(课程表)的字段按顺序为课程编号、课程名、先行课程、课程学分。 SC(选课表)的字段按顺序为学号、课程号、成绩。 各表的记录如表1、表2、表3所示: 表1   关系Student SnoSnameSsexSageSdept 95001李勇男20CS 95002刘晨女19IS 95003王明女18MA 95004张立男19IS 表2    关系Course CnoCnameCpnoCcredit 1数据库54 2数学2 3信息系统14 4操作系统63 5数据结构74 6数据处理2 7PASCAL64 表3   关系SC SnoCnoGrade 95001192 95001285 95001388 95002290 95003380 ①写出创建学生表Student的SQL命令,各字段的类型及长度应根据实际情况确定。其中学号属性不能为空,并且其值是唯一的并在Sno列上建立一个聚簇索引。②检索信息系(IS)和计算机科学系(CS)的学生的姓名和性别。③检索各个课程号及相应的选课人数,并给出结果。④检索每个学生及其选修的课程名和成绩。⑤查询与“刘晨”在同一个系学习的学生的学号、学生姓名。⑥将一个新学生记录(03020,陈冬男′18′IS)插入Student表中。⑦将计算机科学系(CS)全体学生的成绩置零。⑧创建信息系(IS)选修了1号课程的学生的视图IS_S1,字段包括Sno、Sname、Grade。
【正确答案】①CREATE TABLE Student (Sno CHAR(5)NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(1), Sage INT, Sdept CHAR(15)); CREATE CLUSTED INDEX Stusname ON Student(Sname); ②SELECT Sname,Ssex FROM Student WHERE Sdept IN(′IS′,′CS′); ③SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; 查询结果为: CnoCOUNT(Sno) 11 22 32 ④SELECT Student.Sno,Sname,Course.Cname,SC.Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno and SC.Cno=Course.Cno; ⑤SELECT Sno,Sname FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname=′刘晨′); ⑥INSERT INTO Student VALUES(′95020′, ′陈东′, ′男′,18,′IS′); ⑦UPDATE SC SET Grade=0 WHERECS= (SELETE Sdept FROM Student WHERE Student.Sno=SC.Sno); ⑧CREATE VIEM IS_S1(Sno,Sname,Grade) AS SELECT Student. Sno,Sname,Grade FROM Student,SC WHERE Sdept=′IS′ AND Student,Sno=SC.Sno AND SC.Cno=′1′;
【答案解析】