数据库大学实验一
实验目的:
理解和掌握数据库DDL语言,能够熟练地使用SQL DDL语句创建、修改和删除数据库、模式和基本表。
实验内容:
(1)理解和掌握SQL DDL语句的语法,特别是各种参数的具体含义和使用方法;使用SQL语句创建、修改和删除数据库、模式和基本表。掌握SQL语句常见语法错误的调试方法。
(2)针对XSGL数据库设计各种单表查询SQL语句、分组统计查询语句;设计单个表针对自身的连接查询,设计多个表的连接查询。理解和掌握SQL查询语句各个子句的特点和作用,按照SQL程序设计规范写出具体的SQL查询语句,并调试通过。
(3)针对XSGL数据库,正确分析用户查询要求.设计各种嵌套查询和集合查询。
(4)针对 TPC - H 数据库设计单元组插入、批量数据插入、修改数据和删除数据等 SQL 语句。理解和掌握 INSERT 、 UPDATE 和 DELETE 语法结构的各个组成成分,结合嵌套 SQL 子查询,分别设计几种不同形式的插入、修改和删除数据的语句,并调试成功。
(5)针对给定的数据库模式,以及相应的应用需求,创建视图和带 WITHCHECKOPTION 的视图,并验证视图 WITHCHECKOPTION 选项的有效性。
理解和掌握视图消解执行原理,掌握可更新视图和不可更新视图的区别。
实验步骤:
1.创建一个计算机系学生情况的视图Sub_T。
CREATE VIEW Sub_T
AS
SELECT *
FROM Student
WHERE Sdept = ‘CS’;
SELECT * FROM Sub_T;
2.写出创建学生表Student 的SQL语句。
CREATE TABLE Student(
Sno VARCHAR(15) PRIMARY KEY,
Sname VARCHAR(5),
Ssex VARCHAR(2),
Sage INT,
Sdept VARCHAR(2)
);
3.创建一学生情况视图S_SC_C(包括学号、姓名、课程名及成绩)。
CREATE VIEW S_SC_C
AS
SELECT Student.Sno, Student.Sname, Course.Cname, SC.Grade
FROM Student, SC, Course
WHERE Student.Sno = SC.Sno AND Course.Cno = SC.Cno;
SELECT * FROM S_SC_C;
4.创建一学生平均成绩视图S_Avg。
CREATE VIEW S_Avg
AS
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;
SELECT * FROM S_Avg;
5.为SC表在SNo和CNo上建立唯一索引。
CREATE UNIQUE INDEX SC_Sno_Cno ON SC (Sno, Cno);
6.为学生表S在SNo上建立聚集索引。
CREATE INDEX S_SNo ON Student(Sno) USING BTREE;
7.在S表中添加一条学生记录(学号:S8,姓名:张三,性别:男,年龄:20,系别:信息)
INSERT INTO Student
VALUES(‘S8’,‘张三’,‘男’,20,‘IS’);
SELECT * FROM Student WHERE Sname=‘张三’;
8.将数据库这门课的学分数修改为5
UPDATE Course
SET Ccredit = 5
WHERE Cname = ‘数据库’;
SELECT * FROM Course
WHERE Cname = ‘数据库’;
9.删除选修了C1课程的所有选课记录
DELETE FROM SC
WHERE Cno = ‘C1’;
SELECT * FROM SC WHERE Cno=‘C1’;
10.将软件学院选修了C2课程的学生的该门成绩增加10分
SELECT Grade,Sno FROM SC
WHERE Cno=’C2’ AND Sno IN(
SELECT Sno FROM Student WHERE Sdept =’CS’);
UPDATE SC
SET Grade = Grade + 10
WHERE Cno = ‘C2’ AND Sno IN(
SELECT Sno
FROM Student
WHERE Sdept = ‘CS’
);
SELECT Grade,Sno FROM SC
WHERE Cno=’C2’ AND Sno IN(
SELECT Sno FROM Student WHERE Sdept =’CS’);
11.在选课表中删除学生张三所选修的全部课程
DELETE FROM SC
WHERE Sno IN(
SELECT Sno
FROM Student
WHERE Sname = ‘张三’
);
SELECT * FROM SC
WHERE Sno IN(
SELECT Sno
FROM Student
WHERE Sname = ‘张三’
);
12.查询年龄大于18岁的男生的学号与姓名
SELECT Sno, Sname
FROM Student
WHERE Sage>18 AND Ssex = ‘男’;
13.查询所有姓张的学生的学号和姓名
SELECT Sno, Sname
FROM Student
WHERE Sname LIKE ‘张%’;
14.查询数据库这门课的先修课程号
SELECT Cpno
FROM Course
WHERE Cname = ‘数据库’;
15.统计选修课C1课程的学生人数
SELECT COUNT(*)
FROM SC
WHERE Cno = ‘C1’;
16.查询选修了C1课程或者C2课程的学生的学号
SELECT DISTINCT Sno
FROM SC
WHERE Cno IN (‘C1’,‘C2’);
17.查询跟刘晨在同一个系学习的学生的学号和姓名
SELECT Sno, Sname
FROM Student
WHERE Sdept IN(
SELECT Sdept
FROM Student
WHERE Sname = ‘刘晨’
);
18.查询至少有一门课成绩大于70分的学生的学号与姓名
SELECT DISTINCT Sno, Sname
FROM Student
WHERE Sno IN(
SELECT Sno
FROM SC
WHERE Grade > 70
);
19.查询既选修了C1课程又选修了C2课程的学生的学号
SELECT Sno
FROM SC
WHERE Cno = ‘C1’ AND Sno IN(
SELECT Sno
FROM SC
WHERE Cno = ‘C2’
);
20.查询所选课程成绩全部大于70分的学生的学号
SELECT DISTINCT Sno
FROM SC
WHERE Sno NOT IN(
SELECT Sno
FROM SC
WHERE Grade <= 70
);
21.查询选修了全部课程的学生的学号和姓名
SELECT Sno,Sname
FROM Student
WHERE NOT EXISTS (
SELECT * FROM Course WHERE NOT EXISTS (
SELECT * FROM SC
WHERE SC.Sno=Student.Sno AND Cno=Course.Cno
));
22.查询至少选修了2020003号学生所选的全部课程的学生的学号与姓名
SELECT DISTINCT SCX.Sno, Student.Sname
FROM SC SCX, Student
WHERE SCX.Sno = Student.Sno AND NOT EXISTS (
SELECT *
FROM SC SCY
WHERE SCY.Sno = ‘201215122’ AND NOT EXISTS(
SELECT *
FROM SC SCZ
WHERE SCZ.Sno = SCX.Sno AND SCZ.Cno = SCY.Cno
));
实验结果(附数据和图表):
创建一个计算机系学生情况的视图Sub_T。
1.写出创建学生表Student 的SQL语句。
2.创建一学生情况视图S_SC_C(包括学号、姓名、课程名及成绩)。
3.创建一学生平均成绩视图S_Avg。
4.为SC表在SNo和CNo上建立唯一索引。
5.为学生表S在SN上建立聚集索引。
6.在S表中添加一条学生记录(学号:S8,姓名:张三,性别:男,年龄:20,系别:信息)
7.将数据库这门课的学分数修改为5
8.删除选修了C1课程的所有选课记录
9.将软件学院选修了C2课程的学生的该门成绩增加10分
10.在选课表中删除学生张三所选修的全部课程
11.查询年龄大于18岁的男生的学号与姓名,将代码与结果截屏提交到答案中
12.查询所有姓张的学生的学号和姓名,将代码与结果截屏提交到答案中
13.查询数据库这门课的先修课程号,将代码与结果截屏提交到答案中
14.统计选修课C1课程的学生人数,将代码与结果截屏提交到答案中
15.查询选修了C1课程或者C2课程的学生的学号
16.查询跟李四在同一个系学习的学生的学号和姓名
17.查询至少有一门课成绩大于70分的学生的学号与姓名
18.查询既选修了C1课程又选修了C2课程的学生的学号
19.查询所选课程成绩全部大于70分的学生的学号
20.查询选修了全部课程的学生的学号和姓名
21.查询至少选修了2020003号学生所选的全部课程的学生的学号与姓名
实验结果分析及结论:
本次实验主要对数据库,模式,和基本表进行了创建,删除,修改的操作
实验心得体会和建议:
本次实验通过实践学习了书本上对于数据库的DDL语句的语法、使用SQL 语句创建、修改和删除数据库的语句,SQL 查询语句,SQL嵌套查询和集合查询等各种高级查询,SQL语句对数据库进行数据的插入、修改、删除操作,创建视图和带WITH CHECK OPTION的视图,尤其是掌握索引设计原则和技巧,能够创建合适的索引以提高数据库查询,收获巨大。
实验评价及结论:
实验指导老师签字: