数据库原理(第三版)张红娟 参考答案
- 格式:doc
- 大小:174.50 KB
- 文档页数:16
第一章20、供应商(供应商代号,供应商名称,联系电话)项目(项目代号,项目名称,项目负责人)零件(零件号,零件名,价格)供应商-项目(项目代号,供应商代号)项目-零件(项目代号,零件号,零件数)供应商-零件(供应商代号,零件号,零件数)第三章10、设有一数据库GradeManager(成绩管理),包括四个表:学生表(Student)、课程表(Course)、班级表(Class)以及成绩表(Grade),其结构如表3-4所示,数据如表3-5所示。
试用SQL语句创建四个表。
表3-4 成绩管理数据库的表结构表一Student表二Course表三Class表二Course表四Grade答:CREATE TABLE Student(Sno Char(7) NOT NULL UNIQUE,Sname VarChar(20) NOT NULL,Ssex Char(2) NOT NULL,Sage Smallint,Clno Char(5) NOT NULL);CREATE TABLE Course(Cno Char(1) NOT NULL UNIQUE, Cname VarChar(20) NOT NULL,Credit Smallint);CREATE TABLE C lass(Clno Char(5) NOT NULL UNIQUE,SpecialityVarChar(20) NOT NULL,Inyear Char(4) NOT NULL,Number Integer,Monitor Char(7));CREATE TABLE Grade(Sno Char(7) NOT NULL,Cno Char(1) NOT NULL,Gmark Numeric(4,1));INSERT INTO StudentV ALUE(‘2000101’,’李勇’,’男’,20,’00311’);INSERT INTO StudentV ALUE(‘2000102’,’刘诗晨’,’女’,19,’00311’);INSERT INTO StudentV ALUE(‘2000103’,’王一鸣’,’男’,20,’00312’);INSERT INTO StudentV ALUE(‘2000104’,’张婷婷’,’女’,21,’00312’);INSERT INTO StudentV ALUE(‘2001101’,’李勇敏’,’女’,19,’01311’);INSERT INTO StudentV ALUE(‘2001102’,’贾向东’,’男’,22,’01311’);INSERT INTO StudentV ALUE(‘2001103’,’陈宝玉’,’男’,20,’01311’);INSERT INTO StudentV ALUE(‘2001104’,’张逸凡’,’男’,21,’01311’);INSERT INTO CourseV ALUE(‘1’,’数据库’,4);INSERT INTO CourseV ALUE(‘2’,’离散数学’,3);INSERT INTO CourseV ALUE(‘3’,’管理信息系统’,2);INSERT INTO CourseV ALUE(‘4’,’操作系统’,4);INSERT INTO CourseV ALUE(‘5’,’数据结构’,4);INSERT INTO CourseV ALUE(‘6’,’数据处理’,2);INSERT INTO CourseV ALUE(‘7’,’c语言’,4);INSERT INTO ClassV ALUE(‘00311’,’计算机软件’,’2000’,120,’2000101’);INSERT INTO ClassV ALUE(‘00312’,’计算机应用’,’2000’,140,’2000103’);INSERT INTO ClassV ALUE(‘01311’,’计算机软件’,’2001’,220,’2001103’);INSERT INTO GradeV ALUE(‘2000101’,’1’,92);INSERT INTO GradeV ALUE(‘2000101’,’3’,88);INSERT INTO GradeV ALUE(‘2000101’,’5’,86);INSERT INTO GradeV ALUE(‘2000102’,’1’,78);INSERT INTO GradeV ALUE(‘2000102’,’6’,55);INSERT INTO GradeV ALUE(‘2000103’,’3’,65);INSERT INTO GradeV ALUE(‘2000103’,’6’,78);INSERT INTO GradeV ALUE(‘2000103’,’5’,66);INSERT INTO GradeV ALUE(‘2000104’,’1’,54);INSERT INTO GradeV ALUE(‘2000104’,’6’,83);INSERT INTO GradeV ALUE(‘2001101’,’2’,70);INSERT INTO GradeV ALUE(‘2001101’,’4’,83);INSERT INTO GradeV ALUE(‘2001102’,’2’,80);INSERT INTO GradeV ALUE(‘2001102’,’4’,90);INSERT INTO GradeV ALUE(‘2000103’,’1’,83);INSERT INTO GradeV ALUE(‘2000103’,’2’,76);INSERT INTO GradeV ALUE(‘2000103’,’4’,56);INSERT INTO GradeV ALUE(‘2000103’,’7’,88);11、针对T10的四个表,用SQL语言完成以下各项操作:(1)给学生表增加一属性Nation(民族),数据类型为VarChar(20);ALTER TABLE StudentALTER COLUMN Nation VarChar(20);(2)删除学生表中新增的属性Nation;ALTER TABLE StudentDROP COLUMN Nation;(3)向成绩表中插入记录(“2001110”,“3”,80);INSERT INTO GradeV ALUE(‘2001110’,’3’,80);(4)将学号为“200110”的学生的成绩修改为70分;UPDATE GradeSET Gmark = 70WHERE Sno = ‘2001110’;(5)删除学号为“2001110”的学生的成绩记录;DELETE FROM GradeWHERE Sno = ‘2001110’;(6)在学生表的Clno属性上创建一个名为IX_Class的索引,以班级号的升序排序;CREATE INDEX IX_ClassON Student(Clno);(7)删除IX_Class索引DROP INDEX Student.IX_Class;12、针对T10的四个表,用SQL语言完成以下各项操作:(1)找出所有被学生选修了的课程号;SELECT DISTINCT Cno 课程号FROM Grade(2)找出01312班女生的个人信息;SELECT *FROM StudentWHERE Clno='01311' and Ssex='女'(3)找出01311班和01312班的学生姓名性别出生年份;SELECT sname 学生姓名,ssex 性别,2011-sage 出生年份FROM StudentWHERE Clno='01311' or Clno='01312'(4)找出所有姓李的学生的个人信息;SELECT *FROM StudentWHERE Sname like '李%'(5)找出李勇所在班级的学生人数;SELECT COUNT(*)FROM StudentWHERE Clno in(SELECT ClnoFROM StudentWHERE Sname='李勇')(6)找出课程名为操作系统的平均成绩最高分最低分;SELECT A VG(Gmark) 平均成绩,MAX(Gmark) 最高分,MIN(Gmark) 最低分FROM GradeWHERE Cno in(SELECT CnoFROM CourseWHERE Cname='操作系统')(7)选修了课程的学生人数;SELECT COUNT(DISTINCT sno) 学生人数FROM Grade(8)选修了操作系统的学生人数;SELECT COUNT(DISTINCT sno) 学生人数FROM GradeWHERE Cno in(SELECT CnoFROM CourseWHERE Cname='操作系统')(9)找出2000级计算机软件班的成绩为空的学生姓名。
SELECT Sname 学生姓名FROM(SELECT *FROM StudentWHERE Clno in(SELECT ClnoFROM ClassWHERE Speciality='计算机软件' AND Inyear='2000') ) ruanjianWHERE ruanjian.Sno not in(SELECT DISTINCT Sno FROMGrade)with ruanjian as(SELECT Sno,SnameFROM Student join Classon Student.Clno=Class.ClnoWHERE Class.Speciality='计算机软件' and Class.Inyear='2000')SELECT Sname 学生姓名FROM ruanjianWHERE not exists(SELECT *FROM GradeWHERE ruanjian.Sno=Grade.Sno)13、针对T10的四个表,用SELECT的嵌套查询完成以下各项查询:(1)找出和李勇在同一个班级的学生信息;SELECT *FROM StudentWHERE Sname<>'李勇' and Clno in(SELECT ClnoFROM StudentWHERE Sname='李勇')(2)找出所有与学生李勇有相同选修课程的学生信息;SELECT *FROMS tudentWHERE Sname<>'李勇' and exists(SELECT *FROM GradeWHERE Student.Sno=Grade.Sno and o in(SELECT CnoFROMG radeWHERE Sno in(SELECT SnoFROM StudentWHERE Sname='李勇')))(3)找出年龄介于学生李勇和25岁之间的学生信息;SELECT * FROMStudentWHERE Sage < 25 and Sage >(SELECT Sage FROMStudent WHERE Sname='李勇')(4)找出选修了课程是操作系统的学生学号和姓名;SELECT Sno 学号,Sname 姓名FROM StudentWHERE exists(SELECT *FROM GradeWHERE Cno in(SELECT CnoFROM CourseWHERE Cname='操作系统')and Student.Sno=Grade.Sno)(5)找出没有选修1号课程的所有学生姓名;SELECT Sname 姓名FROM StudentWHERE not exists(SELECT *FROM GradeWHERE Student.Sno=Grade.Sno and Cno=1)(6)找出选修了全部课程的学生姓名。