太原理工大学数据库实验报告.docx
- 文档编号:5164315
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:45
- 大小:997.63KB
太原理工大学数据库实验报告.docx
《太原理工大学数据库实验报告.docx》由会员分享,可在线阅读,更多相关《太原理工大学数据库实验报告.docx(45页珍藏版)》请在冰豆网上搜索。
太原理工大学数据库实验报告
本科实验报告
课程名称:
数据库系统概论
实验项目:
交互式SQL、数据完整性、用户鉴别与
数据控制
实验地点:
致远楼B503
专业班级:
软件1229班学号:
29
*********
***********
2014年3月18日
一、实验目的和要求
熟悉通过SQL对数据库进行操作。
二、实验内容和原理
1.在RDBMS中建立一个学生-课程数据库,进行实验所要求的各种操作,所有的SQL操作均在此建立的新库里进行。
2.根据以下要求认真进行实验,记录所有的实验用例及执行结果。
数据定义:
基本表的创建、修改及删除;索引的创建和删除。
数据操作:
完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询);完成各类更新操作(插入数据,修改数据,删除数据)。
视图的操作:
视图的定义(创建和删除),查询,更新(注意更新的条件)。
三、主要仪器设备
操作系统:
Windows7。
数据库管理系统:
SQLServer2008。
四、操作方法与实验步骤实验数据记录实验结果
(一)数据定义:
一.基本表的操作
1.建立基本表
1)创建学生表Student,由以下属性组成:
学号Sno(char型,长度为9,
主码),姓名Sname(char型,长度为20,唯一),性别Ssex(char型,
长度为2),年龄(smallint),所在系(char型,长度为20)。
createtableStudent
(Snochar(9)primarykey,
Snamechar(20)unique,
Ssexchar
(2),
Sagesmallint,
Sdeptchar(20));
2)创建课程表Course,由以下属性组成:
课程号Cno(char型,主码,
长度为4),课程名Cname(char型,长度为40),先行课Cpno(char
型,长度为4,外码),学分Ccredit(smallint)。
createtableCourse
(Cnochar(4)primarykey,
Cnamechar(40),
Cpnochar(4),
Ccreditsmallint);
若设置Cpno外码,插入数据时会提示违反外码约束。
3)创建学生选课表SC,由以下属性组成:
学号Sno(char型,长度为9),
课程号Cno(char型,长度为4),成绩Grade(smallint),其中Sno和
Cno构成主码。
createtablesc
(Snochar(9),
Cnochar(4),
Gradesmallint,
primarykey(Sno,Cno),
foreignkey(Sno)referencesstudent(Sno),
foreignkey(Cno)referencescourse(Cno));
2.修改基本表:
1)向Student表增加“入学时间列”,其数据类型为日期型。
altertableStudentaddS_entrancedate;
2)将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
altertableStudentaltercolumnSageint;
3)增加课程名称必须取唯一值的约束条件。
altertableCourseaddunique(Cname);
注意:
修改表结构后,再次查看表,注意观察变化。
3.删除基本表:
1)在所有的操作结束后删除Student表。
droptableStudent;
2)在所有的操作结束后删除Course表。
droptableCourse;
3)在所有的操作结束后删除SC表。
droptableSC;
思考:
删除表时,不同的删除顺序会有不同结果,为什么注意错误
提示。
二.索引操作
1.建立索引
1)为学生—课程数据库中的Student,Course,SC3个表建立索引。
其
中Student表按学号升序建唯一索引,Course表按课程号升序建唯一
索引,SC表按学号升序和课程号降序建唯一索引。
createuniqueindexStusnoonStudent(Sno);
createuniqueindexCoucnoonCourse(Cno);
createuniqueindexSCnoonSC(SnoASC,CnoDESC);
2.删除索引
1)删除Student表的Stusname索引。
dropindex;
(二)数据操作
一.更新操作
1,插入数据
1)在Student表中插入下列数据:
1,李勇,男,20,CS
2,刘晨,女,19,CS
3,王敏。
女,18,MA
5,张立,男,19,IS
insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('1','李
勇','男',20,'CS');
insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('2','刘
晨','女',19,'CS');
insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('3','王
敏','女',18,'MA');
insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('5','张
立','男',19,'IS')
2)在Course表中插入以下数据:
1,数据库,5,4
2,数学,null,2
6,数据处理,null,2
4,操作系统,6,3
7,PASCAL语言,6,4
5,数据结构,7,4
1,数据库,5,4
3,信息系统,1,4
insertintocourse(Cno,Cname,Cpno,Ccredit)values('1','数据库','5',4);
insertintocourse(Cno,Cname,Ccredit)values('2','数学',2);
insertintocourse(Cno,Cname,Ccredit)values('6','数据处理',2);
insertintocourse(Cno,Cname,Cpno,Ccredit)values('4','操作系统','6',3);
insertintocourse(Cno,Cname,Cpno,Ccredit)values('7','PASCAL语言','6',4);
insertintocourse(Cno,Cname,Cpno,Ccredit)values('5','数据结构','7',4);
insertintocourse(Cno,Cname,Cpno,Ccredit)values('1','数据库','5',4);
insertintocourse(Cno,Cname,Cpno,Ccredit)values('3','信息系统','1',4);
3)在SC表中插入以下数据:
1,1,92
1,2,85
1,3,88
2,2,90
2,3,80
insertintosc(Sno,Cno,Grade)values('1','1',92);
insertintosc(Sno,Cno,Grade)values('1','2',85;
insertintosc(Sno,Cno,Grade)values('1','3',88);
insertintosc(Sno,Cno,Grade)values('2','2',90);
insertintosc(Sno,Cno,Grade)values('2','3',80);
4)将一个新学生元祖(学号:
8;姓名:
陈冬;性别:
男;所在
系:
IS;年龄:
18岁)插入到Student表中。
insertintostudent(Sno,Sname,Ssex,Sdept,Sage)values
('8','陈冬','男','IS',18);(已做)
5)将学生张成民的信息插入到Student表中。
insertintostudentvalues('6','张成民','男',18,'CS');(已做)
6)插入一条选课记录:
(‘8’,‘1’)。
insertintosc(Sno,Cno)values('8','1');(已做)
7)对每一个系,求学生的平均年龄,并把结果存入数据库。
createtableDept_age(Sdeptchar(15),
Avg_agesmallint);
insertintoDept_age(Sdept,Avg_age)selectSdept,avg(Sage)fromstudent
groupbySdept;
2.修改数据
1)将学生1的年龄改为22岁。
updatestudentsetSage=22whereSno='1';
2)将所有学生的年龄增加一岁。
updatestudentsetSage=Sage+1;
3)将计算机科学系全体学生的成绩置零。
updatescsetGrade=0where'CS'=(selectSdeptfromstudent
where=;
3.删除数据
1)删除学号为8的学生记录。
deletefromstudentwhereSno='8';
2)删除所有学生的选课记录。
deletefromsc;
3)删除计算机科学系所有学生的选课记录。
deletefromscwhere'CS'=(selectSdeptfromstudentwhere
=);
二.查询操作
1.单表查询
2)查询全体学生的姓名、学号、所在系。
selectsno,sname,sdept
fromStudent;
5)查询全体学生的姓名、出生年份和所在院系,要求用小写字母表示
所有系名。
selectsname,2013-sagebirth,lower(sdept)sdept
fromStudent;
10)查询年龄在20-23岁(包括20岁和23岁)之间的学生的姓名、系别
和年龄。
selectsname,sdept,sage
fromStudent
wheresagebetween20and23
12)查询计算机科学系(CS)、数学系(MA)、和信息系(IS)学生的姓名和
性别。
selectsname,ssex
fromStudent
whereSdeptin('cs','ma','is')
15)查询所有姓刘的学生的姓名、学号和性别。
selectsname,Sno,ssex
fromStudent
wheresnamelike'刘%'
19)查询DB_Design课程的课程号和学分。
selectCno,CcreditfromcoursewhereCnamelike'DB\_Design'
escape'\';
23)查询计算机科学系年龄在20岁以下的学生姓名。
selectsname
fromstudent
wheresdept='cs'andsage<20
28)计算1号课程的学生平均成绩。
selectAVG(grade)no1
fromsc
whereCno='1'
31)求各个课程号及相应的选课人数。
selectCno,COUNT(sno)number
fromsc
groupbyCno
2.连接查询
1)查询每个学生及其选修课程的情况。
selectStudent.*,sc.*
fromsc,Student
where=
2)对上个题用自然连接完成。
select,Sname,Sage,Ssex,Sdept,Cno,Grade
fromsc,Student
where=
3)
查询每一门课的间接先修课(即先修课的先修课)。
select,
fromCoursefirst,Coursesecond
where=
4)查询每个学生及其选修课程的情况,用外连接来完成
select,Sname,Ssex,Sage,Sdept,Cno,Gradefrom
studentleftouterjoinscon=;
5)查询选修2号课程且成绩在90分以上的所有学生。
select,Snamefromstudent,scwhere
=and='2'and>90;
6)查询每个学生的学号、姓名、选修的课程名及成绩。
select,Sname,Cname,Grade
fromstudent,sc,course
where=and=;
3.嵌套查询
1)查询与“刘晨”在同一个系学习的学生。
selectSno,Sname,Sdept
fromStudent
whereSdeptin(
selectSdept
fromStudent
whereSname='刘晨');
2)查询选修了课程名为“信息系统”的学生学号和姓名。
selectSno,Sname
fromstudent
whereSnoin
(selectSno
fromsc
whereCnoin
(selectCno
fromcourse
whereCname='信息系统'));
3)找出每个学生超过他选修课程平均成绩的课程号。
selectcno
fromscx
wheregrade>
(selectAVG(Grade)
fromscy
where=
groupbySno);
4)查询其他系中比计算机科学系某一学生年龄小的学生姓名和年龄。
selectsname,Sage
fromStudent
whereSage<=any
(selectsage
fromstudent
whereSdept='cs')
andSdept<>'cs';
5)查询其他系中比计算机科学系所有学生年龄小的学生姓名和年龄。
selectsname,Sage
fromStudent
whereSage<=all
(selectsage
fromstudent
whereSdept='cs')
andSdept<>'cs';
6)查询选修了1号课程的学生姓名。
selectSname
fromstudent
whereexists
(select*
fromsc
whereSno=andCno='1');
7)
查询没有选修1号课程的学生姓名。
selectSname
fromstudent
wherenotexists
(select*
fromsc
whereSno=andCno='1');
8)查询选修了全部课程的学生姓名。
selectSname
fromstudent
wherenotexists
(select*
fromCourse
wherenotexists
(select*
fromsc
whereSno=andCno=);
9)查询至少选修了学生1选修的全部课程的学生号码。
selectdistinctSno
fromscscx
wherenotexists
(select*
fromscscy
where='2'andnotexists
(select*
fromscscz
where=and=);
4.集合查询
1)查询计算机科学系的学生及年龄不大于19岁的学生。
select*
fromstudent
whereSdept='CS'
union
select*
fromstudent
whereSage<=19;
2)查询选修了课程1或课程2的学生。
selectSno
fromsc
whereCno='1'
union
selectSno
fromsc
whereCno='2';
3)查询计算机科学系的学生与年龄不大于19岁的学生的交集。
select*
fromstudent
whereSdept='CS'
intersect
select*
fromstudent
whereSage<=19;
4)查询既选修了课程1又选修了课程2的学生。
selectSno
fromsc
whereCno='1'
intersect
selectSno
fromsc
whereCno='2';
5)查询计算机科学系的学生与年龄不大于19岁的学生的差集。
select*
fromstudent
whereSdept='CS'
except
select*
fromstudent
whereSage<=19
三、视图操作
1.建立视图
1)建立信息系学生的视图。
createviewIS_Student
asselectSno,Sname,Sage
fromstudent
whereSdept='IS';
2)建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视
图只有信息系的学生。
createviewIS_Student
asselectSno,Sname,Sage
fromstudent
whereSdept='IS'withcheckoption;
3)建立信息系选修了1号课程的学生的视图。
createviewIS_S1(Sno,Sname,Grade)
asselect,Sname,Grade
fromstudent,sc
whereSdept='IS'and=and='1';
4)
建立信息系选修了1号课程且成绩在90分以上的学生的视图。
createviewIS_S2(Sno,Sname,Grade)
asselectSno,Sname,Grade
fromIS_S1
whereGrade>=90;
5)定义一个反应学生出生年份的视图。
createviewBT_S(Sno,Sname,Sbirth)
asselectSno,Sname,2004-Sage
fromstudent;
6)
将学生的学号及他的平均成绩定义为一个视图。
createviewS_G(Sno,Gavg)
asselectSno,avg(Grade)
fromsc
groupbySno;
7)将Student表中所有女生记录定义为一个视图。
createviewF_Student(F_sno,name,sex,age,dept)
asselect*
fromstudent
whereSsex='女';
2.删除视图:
1)删除视图BT_S:
3.查询视图:
1)在信息系学生的视图中找出年龄小于20岁的学生。
selectSno,Sage
fromIS_Student
whereSage<=20;
2)
查询选修了1号课程的信息系学生。
select,Sname
fromIS_Student,sc
where=and='1';
3)
在S_G视图中查询平均成绩在80分以上的学生学号和平均成绩。
select*
fromS_G
whereGavg>=80;
4.更新视图:
1)将信息系学生视图IS_Student中学号为5的学生姓名改为
“刘辰”。
updateIS_Student
setSname='刘辰'
whereSno='5';
2)向信息系学生视图IS_Student中插入一个新的学生记录,其中学号
为9,姓名为赵新,年龄为20岁。
insertintoIS_Student
values('9','赵新',20,'IS');
3)删除信息系学生视图IS_Student中学号为9的记录。
delete
fromIS_Student
whereSno='9';
一、实验目的和要求
(1)了解SQLSerer数据库系统中数据完整性控制的基本方法
(2)熟练掌握常用CREATE或ALTER在创建或修改表时设置约束
(3)了解触发器的机制和使用
(4)验证数据库系统数据完整性控制
二、实验内容和原理
结合ST数据库中的各个表,设置相关的约束,要求包括主键约束、外键约束、唯一约束、
检查约束、非空约束等,掌握各约束的定义方法。
设置一个触发器,实现学生选课总学分的完整性控制,了解触发器的工作机制。
设计一些示例数据,验证完整性检查机制。
要求包括如下方面的内容:
使用SQL语句设置约束
使用CREATE或ALTER语句完成如下的操作,包括:
1.设置各表的主键约束
2.设置相关表的外键
3.设置相关属性的非空约束、默认值约束、唯一约束
4.设置相关属性的CHECK约束
使用触发器
创建一个触发器,实现如下的完整性约束:
当向SC表中插入一行数据时,自动将学分累加到总学分中。
记录修改学分的操作。
检查约束和触发器
分别向相关表插入若干条记录,检查你设置
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原 理工大学 数据库 实验 报告