数据库原理课后习题答案
来源:互联网 发布:淘宝买男鞋哪个店好 编辑:程序博客网 时间:2024/04/27 12:22
第三章
10、设有一数据库 GradeManager(成绩管理),包括四个表:学生表(Student)、课程表(Course)、班级表(Class)以及成绩表(Grade),其结构如表3-4所示,数据如表3-5所示。试用SQL语句创建四个表。
答: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 Class
(Clno Char(5) NOT NULL UNIQUE,
Speciality VarChar(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 Student
VALUE(‘2000101’,’李勇’,’男’,20,’00311’);
INSERT INTO Student
VALUE(‘2000102’,’刘诗晨’,’女’,19,’00311’);
INSERT INTO Student
VALUE(‘2000103’,’王一鸣’,’男’,20,’00312’);
INSERT INTO Student
VALUE(‘2000104’,’张婷婷’,’女’,21,’00312’);
INSERT INTO Student
VALUE(‘2001101’,’李勇敏’,’女’,19,’01311’);
INSERT INTO Student
VALUE(‘2001102’,’贾向东’,’男’,22,’01311’);
INSERT INTO Student
VALUE(‘2001103’,’陈宝玉’,’男’,20,’01311’);
INSERT INTO Student
VALUE(‘2001104’,’张逸凡’,’男’,21,’01311’);
INSERT INTO Course
VALUE(‘1’,’数据库’,4);
INSERT INTO Course
VALUE(‘2’,’离散数学’,3);
INSERT INTO Course
VALUE(‘3’,’管理信息系统’,2);
INSERT INTO Course
VALUE(‘4’,’操作系统’,4);
INSERT INTO Course
VALUE(‘5’,’数据结构’,4);
INSERT INTO Course
VALUE(‘6’,’数据处理’,2);
INSERT INTO Course
VALUE(‘7’,’c语言’,4);
INSERT INTO Class
VALUE(‘00311’,’计算机软件’,’2000’,120,’2000101’);
INSERT INTO Class
VALUE(‘00312’,’计算机应用’,’2000’,140,’2000103’);
INSERT INTO Class
VALUE(‘01311’,’计算机软件’,’2001’,220,’2001103’);
INSERT INTO Grade
VALUE(‘2000101’,’1’,92);
INSERT INTO Grade
VALUE(‘2000101’,’3’,88);
INSERT INTO Grade
VALUE(‘2000101’,’5’,86);
INSERT INTO Grade
VALUE(‘2000102’,’1’,78);
INSERT INTO Grade
VALUE(‘2000102’,’6’,55);
INSERT INTO Grade
VALUE(‘2000103’,’3’,65);
INSERT INTO Grade
VALUE(‘2000103’,’6’,78);
INSERT INTO Grade
VALUE(‘2000103’,’5’,66);
INSERT INTO Grade
VALUE(‘2000104’,’1’,54);
INSERT INTO Grade
VALUE(‘2000104’,’6’,83);
INSERT INTO Grade
VALUE(‘2001101’,’2’,70);
INSERT INTO Grade
VALUE(‘2001101’,’4’,83);
INSERT INTO Grade
VALUE(‘2001102’,’2’,80);
INSERT INTO Grade
VALUE(‘2001102’,’4’,90);
INSERT INTO Grade
VALUE(‘2000103’,’1’,83);
INSERT INTO Grade
VALUE(‘2000103’,’2’,76);
INSERT INTO Grade
VALUE(‘2000103’,’4’,56);
INSERT INTO Grade
VALUE(‘2000103’,’7’,88);
索引的优缺点:
数据库索引是为了增加查询速度而对表字段附加的一种标识。
反例:1、如果每次都需要取到所有表记录,无论如何都必须进行全表扫描了,那么是否加索引也没有意义了。2、对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义。3、对于记录比较少的表,增加索引不会带来速度的优化反而浪费了存储空间,因为索引是需要存储空间的,而且有个致命缺点是对于update/insert/delete的每次执行,字段的索引都必须重新计算更新。
(5)找出李勇所在班级的学生人数;
SELECT COUNT(*)
FROM Student
WHERE Clno in
(SELECT Clno
FROM Student
WHERE Sname='李勇')
(6)找出课程名为操作系统的平均成绩 最高分 最低分;
SELECT AVG(Gmark) 平均成绩,MAX(Gmark)最高分,MIN(Gmark)最低分
FROM Grade
WHERE Cno in
(SELECT Cno
FROM Course
WHERE Cname='操作系统')
(7)选修了课程的学生人数;
SELECT COUNT(DISTINCT sno) 学生人数
FROM Grade
(8)选修了操作系统的学生人数;
SELECT COUNT(DISTINCT sno) 学生人数
FROM Grade
WHERE Cno in
(SELECT Cno
FROM Course
WHERE Cname='操作系统')
13、针对T10的四个表,用SELECT的嵌套查询完成以下各项查询:【难点】
(1)找出和李勇在同一个班级的学生信息;
SELECT *
FROM Student
WHERE Sname<>'李勇' and Clno in
(SELECT Clno
FROM Student
WHERE Sname='李勇')
(2)找出所有与学生李勇有相同选修课程的学生信息;
SELECT *
FROMS tudent
WHERE Sname<>'李勇' and exists
(SELECT *
FROM Grade
WHERE Student.Sno=Grade.Sno and Grade.Cno in
(SELECT Cno
FROMG Grade
WHERE Sno in
(SELECT Sno
FROM Student
WHERE Sname='李勇')))
(3)找出年龄介于学生李勇和25岁之间的学生信息;
SELECT * FROM Student
WHERE Sage < 25 and Sage >
(SELECT Sage FROMStudent WHERE Sname='李勇')
(4)找出选修了课程是操作系统的学生学号和姓名;
SELECT Sno 学号,Sname姓名
FROM Student
WHERE exists
(SELECT *
FROM Grade
WHERE Cno in(SELECT Cno
FROM Course
WHERE Cname='操作系统')
and Student.Sno=Grade.Sno)
(5)找出没有选修1号课程的所有学生姓名;
SELECT Sname 姓名
FROM Student
WHERE not exists
(SELECT *
FROM Grade
WHERE Student.Sno=Grade.Sno and Cno=1)
(6)找出选修了全部课程的学生姓名。
SELECT Sname 姓名
FROM Student
WHERE not exists
(SELECT Cno
FROM Course
except
SELECT Cno
FROMGrade
WHERE Student.Sno=Grade.Sno)
(4)对每个班,求学生的平均年龄,并把结果存入数据库。
ALTER TABLE Class
ADD HCage Smallint NULL
UPDATE Class
SET Cage=case
WHEN Clno='00311' THEN (SELECT AVG(Sage)
FROM Student
WHERE Clno='00311')
WHEN Clno='00312' THEN (SELECT AVG(Sage)
FROM Student
WHERE Clno='00312')
WHEN Clno='01311' THEN (SELECT AVG(Sage)
FROM Student
WHERE Clno='01311')
end
FROM Class
- 数据库原理课后习题答案
- SDH原理与运用 课后习题答案
- 课后习题答案
- 《数据库系统概论》第四版课后习题答案
- 数据库系统概论课后习题答案第二章
- 数据库系统概论课后习题答案第三章
- 《软件工程导论》课后习题答案
- MATLAB R2012a课后习题答案
- 算法导论课后习题答案
- 数据库原理与设计课后作业——习题九
- 请问谁有计算机组成原理张基温版第六版的课后习题答案啊!
- 编译原理习题答案
- 操作系统原理课后习题8.8
- C程序设计谭浩强版课后习题答案
- 《C语言程序设计教程》课后习题答案
- 【千份热门课后习题答案大全】
- 新版汇编语言程序设计【课后习题答案】
- 电子线路非线性部分课后习题答案
- 学习日记4
- 【48】java抽象类和接口的定义和区别
- 《辅助技能》程序命名规范
- const和#define的区别
- 排序算法之直接插入排序
- 数据库原理课后习题答案
- Mac下配置Nodejs开发环境
- java37java中的线程(二)
- c 连接mysql数据库
- 如何提高蓝牙BLE的传输速率和稳定性
- 【Squid中文权威指南】磁盘缓存基础
- sql面试题 学生表, 课程表,成绩表,教师表
- Leetcode no. 79
- vim + ctags + taglist