数据库实验三.docx
《数据库实验三.docx》由会员分享,可在线阅读,更多相关《数据库实验三.docx(11页珍藏版)》请在冰豆网上搜索。
数据库实验三
任课教师:
舒挺
《数据库原理及应用》
(2014-2015学年第1学期)
实
验
报
告
学号:
姓名:
班级:
实验三数据库更新和视图创建实验
一.实验目的
本实验的目的是要求学生熟练掌握使用SQL和通过SQLServer查询分析器向数据库输入数据、修改数据和删除数据的操作;使学生掌握视图的定义与维护操作,加深对视图在关系数据库中的作用的理解。
。
二.相关知识
SQLServer提供了很多方法更新表中数据。
以插入记录为例,可以使用INSERT语句、VALUES子句将特定值集合插入一行;可以使用数据库接口API(ADO、OLEDB、ODBC和DB-Library)中的函数进行数据插入等。
本实验主要掌握INSERT、UPDATE和DELETE语句的基本用法。
1.插入操作,其语句的一般格式为
INSERT
INTOtable_or_view[(colum_list)]
VALUES(date_values);
此语句是使date_values作为一行数据记录插入已命名的表或视图table_or_view中。
Column_list是由逗号分隔的table_or_view的列名列表,用来指定为其提供数据的列。
如果没有指定column_list,表或视图中的所有列都将接收数据。
如果column_list没有为表或视图中的所有列命名,将在列表中没有命名的任何列中插入一个NULL值(或者在默认情况下为这些列定义的默认值)。
在列的列表中没有指定的所有列都必须允许NULL值或者指定的默认值。
否则SQLServer将返回一个错误。
2.修改操作语句的一般格式为
UPDATE表名
SET<列名>=<表达式>[,<列名>=<表达式>]……
[where<条件>];
其功能是修改指定表中满足WHERE子句条件的元组。
其中SET子句用于指定修改方法,即用<表达式>的值取代相应的属性列值。
如果省略WHERE子句,则表示要修改表中的所有元组。
3.删除语句的一般格式为
DELETE
FROM<表名>
[WHERE<条件>];
其功能是从指定表中删除满足WHERE子句条件的所有元组。
如果省略WHERE子句,则表示要删除表中的所有元组,但表的定义仍在字典中。
视图是根据子模式建立的虚拟表。
一个视图可以由一个表构造,也可以由多个表构造。
利用企业管理器和视图创建向导进行创建,查看和修改视图就如同对表的操作一样,非常容易。
三.实验内容
所使用的学生管理库中的三张表为:
(1)STUDENT(学生信息表)
SNO(学号)
SNAME(姓名)
SEX(性别)
SAGE(年龄)
SDEPT(所在系)
95001
李勇
男
20
CS
95002
刘晨
女
19
IS
95003
王名
女
18
MA
95004
张立
男
19
IS
95005
李明
男
22
CS
95006
张小梅
女
23
IS
95007
封晓文
女
20
MA
(2)COURSE(课程表)
CNO(课程号)
CNAME(课程名)
CPNO(先行课)
CCREDIT(学分)
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL语言
6
4
(3)SC(选修表)
SNO(学号)
CNO(课程号)
Grade(成绩)
95001
1
92
95001
2
85
95001
3
88
95002
2
90
95002
3
80
95003
1
78
95003
2
80
95004
1
90
95004
4
60
95005
1
80
95005
3
89
95006
3
80
95007
4
65
数据更新具体完成以下例题。
例1插入一条是你本人信息的学生记录;插入至少一条你本人信息的选课记录。
注:
除学号、姓名为真实数据,其他数据随意。
INSERT
INTOSTUDENT(SNO,SNAME,SEX,SDEPT,SAGE)
VALUES('329700011','吴春波','女','DM','20');
INSERT
INTOSC(SNO,CNO)
VALUES('329700011','1');
例2将一新学生记录(学号:
99999;姓名:
风清扬;性别:
男;年龄:
20;所在系:
计算机科学与技术系’CS’)插入学生表中;插入一条该生选课记录(‘99999’,’4’,’60’)。
INSERT
INTOSTUDENT(SNO,SNAME,SEX,SDEPT,SAGE)
VALUES('99999','风清扬','男','CS','20');
INSERT
INTOSC(SNO,CNO,GRADE)
VALUES('99999','4','60');
例3对每一个系,求学生的平均年龄,并把结果存入数据库。
对于这道题,首先要在数据库中建立一个有两个属性列的新表,其中一列存放系名,另一列存放相应系的学生平均年龄。
CREATETABLEDeptage(所在系CHAR(20),平均年龄SMALLINT);
然后对数据库的学生表按所在系分组求平均年龄,再把所在系和平均年龄存入新表中。
CREATETABLEDEPT_AGE
(SDEPTCHAR(15),
AVG_AGESMALLINT);
INSERT
INTODEPT_AGE(SDEPT,AVG_AGE)
SELECTSDEPT,AVG(SAGE)
FROMSTUDENT
GROUPBYSDEPT;
例4将学生95001的年龄改为22岁。
UPDATESTUDENT
SETSAGE=22
WHERESNO='95001';
例5将所有学生的年龄增加一岁。
UPDATESTUDENT
SETSAGE=SAGE+1;
例6将课程“数据库”的成绩用五级制显示,成绩>=90为优秀,90>成绩>=80为良好,80>成绩>=70为中等,70>成绩>=60为及格,成绩<60为不及格。
例7将计算机科学系全体学生的成绩置零。
updatesc
setgrade=0
where'CS'=
(selectsdept
fromstudent
wherestudent.sno=sc.sno);
例8删除“信息系统”课程成绩小于李明学生成绩的记录。
/*delete
fromstudent
where
(*/selectsno
fromsc
where(grade<(
selectgrade
fromsc
wheresno=(selectsno
fromstudent
wheresname='李明')
and(cno=
(selectcno
fromcourse
wherecname='信息系统'))))
例9删除学号为95006的学生记录
select*/*delete*/
fromstudent
wheresno='95006'
例10删除计算机科学系所有学生的选课记录
select*/*delete*/
fromSC
where'CS'=
(selectsdept
fromstudent
wherestudent.sno=sc.sno);
视图操作具体完成以下例题。
例1建立信息系IS学生的视图
例2建立信息系选修了’1’号课程的学生视图
例3建立信息系选修了’1’号课程且成绩在90分以上的学生视图
例4定义一个反映学生出生年份的视图
四.实验结果与分析(SQL代码及结果截图)
五.实验心得